📌 파일 시스템

파일과 디렉터리를 관리하는 운영체제 내의 프로그램을 말한다.

 

파일과 디렉터리는 보조기억 장치에 있는 데이터 덩어리일 뿐이다.

운영체제가 이를 어떻게 파일과 디렉터리로 관리하는지 알아보자.

 

🔹 파일

파일이란 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다.
의미 있고 관련 있는 정보를 모은 논리적 단위라고도 볼 수 있다.

 

파일은 파일을 실행하기 위한 정보와 부가 정보(= 속성, 메타 데이터)로 구성된다.

 

🔹 파일 속성과 유형

 

파일 시스템은 파일별로 아래와 같은 속성을 유지하고 관리한다.

속성 이름 의미
유형 운영체제가 인지하는 파일의 종류를 나타낸다.
크기 파일의 현재 크기와 허용 가능한 최대 크기를 나타낸다.
보호 어떤 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지를 나타낸다.
생성 날짜 파일이 생성된 날짜를 나타낸다.
마지막 접근 날짜 파일에 마지막으로 접근한 날짜를 나타낸다.
마지막 수정 날짜 파일이 마지막으로 수정된 날짜를 나타낸다.
생성자 파일을 생성한 사용자를 나타낸다.
소유자 파일을 소유한 사용자를 나타낸다.
위치 파일의 보조기억장치상의 현재 위치를 나타낸다.

 

파일 속성 중 파일 유형은 운영체제가 인식하는 파일 종류를 나타낸다.

같은 이름의 파일이라도 유형이 다르면 실행 양상도 달라진다. 그래서 파일을 실행할때 OS에 파일 유형을 알려주어야 한다.

파일 유형을 알리기 위해 가장 흔히 사용하는 방식은 파일 이름 뒤에 붙는 '확장자'를 이용하는 것이다.

 

🔹 파일 연산을 위한 시스템 호출

파일을 다루는 모든 작업은 운영체제에 의해 이루어진다.
따라서 어떤 응용프로그램도 임의로 파일을 조작 할 수 없으며, 파일을 다루려면 운영체제에 부탁해야 한다.

 

운영체제는 다음과 같은 파일 연산을 위한 시스템 호출을 제공한다.

  1. 파일 생성
  2. 파일 삭제
  3. 파일 열기
  4. 파일 닫기
  5. 파일 읽기
  6. 파일 쓰기

 

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 스래싱과 프레임 할당  (0) 2025.02.14
[CS] 페이지 교체 ( 페이지 교체 알고리즘 )  (0) 2025.02.14
[CS] 페이징  (0) 2025.02.13
[CS] 가상 메모리  (0) 2025.02.13
[CS] 동기화  (0) 2025.02.12
프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 '스래싱'이라 한다.

 

스래싱이 발생하는 근본적인 원인은 각 프로세스가 필요로 하는 초소한의 프레임 수가 보장되지 않았기 때문이다.

 

예를 들어, 프로세스 A를 무리 없이 실행하기 위해서 최소 10개의 프레임이 필요한데,

프로세스 A가 5개의 프레임만 이용할 수 있다면 페이지 폴트가 자주 발생하게 된다. 

스래싱의 발생 위험이 높아진다고 할 수 있다.

 

따라서 운영체제는 각 프로세스가 필요로 하는 최소한의 프레임 수를 파악하고,

프로세스들에게 적절한 프레임을 할당해주어야한다.

 

📌 프레임 할당

🔹 균등 할당

  • 가장 단순한 할당 방식
  • 모든 프로세스들에게 균등하게 프레임을 할당하는 방식을 말한다.
  • 예를 들어 3개의 프로세스에 총 300개의 프레임을 할당 할 수 있으면, 각각의 프로세스마다 100개씩 프레임을 할당한다.

하지만 위와 같은 방식은 효율적이지 못하다.

프로세스의 크기는 각기 다른데, 동일한 프레임 개수를 할당하는 것은 비합리적이라고 볼 수 있다.

 

🔹 비례 할당

  • 프로세스 크기에 비례하여 프레임을 할당하는 방식을 말한다.
  • 예를 들어 모메장과 게임 2개의 프로세스가 있을 때 크기가 더 큰 게임 쪽에 프레임을 상대적으로 좀 더 많이 할당한다.
  • 하지만 비례 할당 방식도 완벽하지는 않다. 프로세스의 크기가 크더라도 막상 실행해보면 많은 프레임을 필요로 하지 않는 경우도 있기 경우와 반대로 프로세스의 크기가 작더라도 실행해보면 많은 프레임을 필요로 하는 경우도 있다.

균등할당과 비례할당 방식은 프로세스의 실행과정을 고려하지 않고 단순히 프로세스의 크기와 물리 메모리의 크기만을

고려한 방식이라는 점에서 '정적 할당 방식'이라고 한다.


 

프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식에는 크게 '작업 집합 모델'을 사용하는 방식과

'페이지 폴트 빈도'를 사용하는 방식이 있다.

🔹 작업 집합 모델 기반 프레임 할당

프로세스가 일정 기간 동안 참조한 페이지 집합(=작업 집합)을 기억하여 빈번한 페이지 교체를 방지하는 프레임 할당 방식

 

CPU는 메모리를 참조할 때 참조 지역성의 원리에 의거해 주로 비슷한 구역을 집중적으로 참조한다.

즉, 한 프로세스가 100개의 페이지로 이루어졌다고 가정했을 경우에 100개를 모두 고르게 참조하는 것이 아닌

특정 시간 동안에 몇몇 개의 페이지만을 집중적으로 참조하게 되는 것이다.

 

따라서 CPU가 특정 시간 동안 주로 참조한 페이지 개수만큼만 프레임을 할당해주면 페이지 교체는 빈번하게 발생하지 않게 된다.

이때 실행중인 프로세스가 일정 시간 동안 참조한 페이지의 집합을 '작업 집합'이라고 한다.

 

🔹 페이지 폴트 빈도 기반 프레임 할당

페이지 폴트율에 상한선과 하한선을 정하고, 이 범위 안에서만 프레임을 할당하는 방식

 

1️⃣ 페이지 폴트율이 너무 높으면 그 프로세스는 너무 적은 프레임을 갖고 있다.

2️⃣ 페이지 폴트율이 너무 낮으면 그 프로세스가 너무 많은 프레임을 갖고 있다.

 

페이지 폴트 빈도 기반 프레임 할당은 위 2가지 가정에서 생겨난 방식이다.

  • 페이지 폴트율이 상한선보다 더 높아지면 그 프로세스는 너무 적은 프레임을 갖고 있다고 볼 수 있기 때문에 프레임을 더 할당해 주면 된다.
  • 페이지 폴트율이 하한선보다 더 낮아지면 그 프로세스는 너무 많은 프레임을 갖고 있다고 볼 수 있기 때문에 다른 프로세스에 할당하기 위해 프레임을 회수한다.

 

작업집합 모델 기반 프레임 할당과 페이지 폴트 빈도 기반 프레임 할당은 프로세스의 실행과정을 통해 프레임을 할당하는 방식이기 때문에 '동적 할당 방식'이라고 한다.

 

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 파일 시스템  (0) 2025.02.14
[CS] 페이지 교체 ( 페이지 교체 알고리즘 )  (0) 2025.02.14
[CS] 페이징  (0) 2025.02.13
[CS] 가상 메모리  (0) 2025.02.13
[CS] 동기화  (0) 2025.02.12
운영체제는 프로세스들이 한정된 메모리를 효율적으로 이용할 수 있도록 기존에 메모리에 적재된 불필요한 페이지를 선별하여 보조기억장치로 내보낼 수 있어야 하고, 프로레스들에 적절한 수의 프레임을 할당하여 페이지를 할당할 수 있게 해야한다.

📌 요구 페이징

프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법을
'요구 페이징'이라고 한다.

 

요구 페이징의 기본적인 작동은 다음과 같다.

1️⃣ CPU가 특정 페이지에 접근하는 명령어를 실행한다.

2️⃣ 해당 페이지가 현재 메모리에 있으면 CPU는 페이지가 적재된 프레임에 접근한다.

3️⃣ 해당 페이지가 현재 메모리에 없으면 페이지 폴트가 발생한다.

4️⃣ 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.

5️⃣ 다시 1️⃣을 수행한다.

 

📌 순수 요구 페이징

아무런 페이지도 메모리에 적재하지 않은 채 무작정 실행하는 방법
프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트가 계속 발생하고,
어느 정도 적재된 이후부터는 발생 빈도가 떨어진다.

 

페이징 시스템이 안정적으로 작동하려면 두 가지를 해결해야 한다.

하나는 페이지 교체이고, 다른 하나는 프레임 할당이다.

📌 페이지 교체 알고리즘

쫓아낼 페이지를 결정하는 바법

 

일반적으로 페이지 폴트를 가장 적게 일으키는 알고리즘을 좋은 알고리즘으로 평가한다.

그렇기에 페이지 교체 알고리즘을 제대로 이해하려면 '페이지 폴트 횟수'를 알 수 있어야 한다.

페이지 폴트 횟수는 '페이지 참조열'을 통해 알 수 있다.

 

페이지 참조열은 CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열을 의미한다.

2 2 2 3 5 5 5 3 3 7

가령 CPU가 위와 같은 순서로 페이지에 접근했다면

2 3 5 3 7

위처럼 연속된 페이지를 생략한 페이지열, 다시 말해서 위 숫자열이 페이지 참조열이다.

 

연속된 페이지를 생략하는 이유는 중복된 페이지를 참조하는 행위는 페이지 폴트를 발생시키지 않기 때문이다.

페이지 교체 알고리즘을 평가할 때 관심있게 고려할 것은 오직 페이지 폴트의 발생 횟수이기 때문에 어차피 페이지 폴트가

일어나지 않을 연속된 페이지에 대한 참조는 고려하지 않는다.

 

🔹 FIFO 페이지 교체 알고리즘

메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식
2 3 1 3 5 2 3 4 2 3

 

위와 같은 페이지 참고열이 있을 때, FIFO 페이지 교체 알고리즘을 사용하면 총 4번의 페이지 폴트가 발생한다.

 

2 3 1 / 5 (2를 내쫓음) 1번 

5 3 1 / 2 (3을 내쫓음) 2번

5 2 1 / 3 (1을 내쫓음) 3번

5 2 3 / 4 (5를 내쫓음) 4번

 

FIFO 교체 알고리즘은 마냥 좋지 않다. 

프로그램 실행 내내 사용될 내용을 포함하고 있는 페이지를 쫓아낼 가능성이 높기 때문이다.

 

🔹 2차 기회 페이지 교체 알고리즘

  FIFO 페이지 교체 알고리즘의 변형으로 한번 더 기회를 주는 알고리즘이다.

 

기본적으로 메모리에서 가장 오래 머물렀던 페이지를 대상으로 내보낼 페이지를 선별한다.

차이가 있는 점은 만일 페이지의 참조 비트가 1이면( CPU에서 접근한 적이 있다는 의미 ), 

당장 내쫓지 않고 참조 비트를 0( CPU가 접근한적 없음 )으로 만든 뒤 현재 시간을 적재 시간으로 설정한다.

 

🔹 최적 페이지 교체 알고리즘

CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘이다.
가장 오랫동안 사용되지 '않을' 페이지를 교체한다는 것

 

앞으로의 사용 빈도가 가장 낮은 페이지를 교체하는 알고리즘을 페이지 교체 알고리즘으로 삼는 것이 가장 합리적이다.

2 3 1 3 5 2 3 4 2 3

 

위 페이지 참조열에 최적 페이지 교체 알고리즘을 적용하면 총 2번의 페이지 폴트가 발생한다.

 

2 3 1 / 5 ( 1을 내 쫓음 ) 1번

2 3 5 / 4 ( 5을 내 쫓음 ) 2번

 

다만 최적 페이지 교체 알고리즘은 구현이 매우 어렵다. 앞으로 오랫동안 사용되지 않을 페이지를 예측한다는 것이 문제다.

따라서 최적 페이지 교체 알고리즘은 그 자체를 운영체제에서 사용하기보다, 주로 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 목적으로 사용된다. 즉, 최적 페이지 교체 알고리즘을 실행했을 때 발생하는 페이지 폴트 횟수를 페이지 폴트의 하한선으로 간주하고, 최적 페이지 교체 알고리즘에 비해 얼만큼 페이지 폴트 횟수가 발생하느냐를 통해 페이지 교체 알고리즘을 평가하기 위해 사용한다.

 

🔹 LRU 페이지 교체 알고리즘

가장 오랫동안 사용되지 '않은' 페이지를 교체하는 알고리즘

 

최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이라는 것을 기본으로 두고 만들어진 알고리즘이다.

2 3 1 3 5 2 3 4 2 3

 

위 페이지 참조열에 LRU 페이지 교체 알고리즘을 사용하면 총 3번의 페이지 폴트가 발생한다.

 

2 3 1 / 5 ( 2를 내쫓음 ) 1번

5 3 1 / 2 ( 1을 내쫓음 ) 2번

5 3 2 / 4 ( 5를 내쫓음 ) 3번

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 파일 시스템  (0) 2025.02.14
[CS] 스래싱과 프레임 할당  (0) 2025.02.14
[CS] 페이징  (0) 2025.02.13
[CS] 가상 메모리  (0) 2025.02.13
[CS] 동기화  (0) 2025.02.12
페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고,
메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤
페이지를 프레임에 할당하는 가상 메모리 관리 기법이다.

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 스래싱과 프레임 할당  (0) 2025.02.14
[CS] 페이지 교체 ( 페이지 교체 알고리즘 )  (0) 2025.02.14
[CS] 가상 메모리  (0) 2025.02.13
[CS] 동기화  (0) 2025.02.12
[CS] CPU 스케줄링  (0) 2025.02.11

연속 메모리 할당

프로세스에 연속적인 메모리 공간을 할당하는 방식을 연속 메모리 할당 방식이라 한다.

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 페이지 교체 ( 페이지 교체 알고리즘 )  (0) 2025.02.14
[CS] 페이징  (0) 2025.02.13
[CS] 동기화  (0) 2025.02.12
[CS] CPU 스케줄링  (0) 2025.02.11
[CS] 스레드  (0) 2025.02.11
동시다발적으로 실행되는 프로세스들은 공동의 목적을 올바르게
수행하기 위해 서로 협력하며 영향을 주고 받는다.
협력하여 실행되는 프로세스들은 싱행 순서와 자원의 일관성을 보장해야 하기 때문에 반드시 '동기화'해야 한다.

 

📌 동기화가 필요한 이유

멀티프로세스 / 멀티스레드 환경에서는 여러 개의 프로세스나 스레드가 동시에 공유 데이터에 접근할 경우
문제가 발생할 수 있다.
이러한 문제를 해결하기 위해 동기화 기법이 필요하다.
  • 경쟁 조건( Race Condition ) 방지
    • 여러 스레드가 동시에 공유 자원에 접근하여 값이 꼬이는 문제를 방지한다.
    • 경쟁 조건이 발생하는 근본적인 이유를 확인하자면 다음과 같다.
      • 간단히 특정 값을 증가시키는 ++ 이라고 하더라도 저급언어로 변환되면 실제 실행되는 코드는 다르게 나타난다.
a++; // 1 증가

// 실제 저급언어
r1 = a // a를 레지스터에 저장
r1 = r1 + 1 // 레지스터 값 1 감소
a = r1 // 레지스터 값을 총합 a에 저장

여기에서 r1은 레지스터를 의미함

 

위와 같이 1을 증가시키는 것도 저급 언어로 변환되면 3줄이나 되기 때문에 한줄 한줄 실행하는 과정에서 문맥 교환이 일어나면 데이터가 꼬일 수 있다.

 

  • 데이터 일관성 유지( Consistency )
    • 한 프로세스가 데이터를 변경하는 동안 다른 프로세스가 변경된 데이터를 올바르게 읽도록 보장한다.
  • 교착 상태( Deadlock ) 방지
    • 여러 프로세스가 서로의 자원을 기다리면서 무한 대기 상태에 빠지는 문제를 방지한다.
운영체제는 임계 구역 문제를 아래 세가지 원칙 하에 해결한다.

 

1️⃣ 상호 배제 : 한 프로세스가 임계 구역에 진입했다면 다른 프로세스는 임계 구역에 들어올 수 없다.
2️⃣ 진행 : 임계 구역에 어떤 프로세스도 진입하지 않았다면 임계 구역에 진입하고자 하는 프로세스는 들어갈 수 있어야함
3️⃣ 유한 대기 : 한 프로세스가 임계 구역에 진입하고 싶다면 그 프로세스는 언젠가는 임계 구역에 들어올 수 있어야 함 ( 임계 구역에 들어오기 위해 무한정 대기하면 안됨 )


📌 동기화 기법

🔹 뮤텍스 락

  • 특징 : 한 번에 하나의 스레드만 공유 자원에 접근할 수 있도록 보장해준다. ( 상호 배제 해결을 위한 도구 )
  • 사용 : pthread_mutext_lock() / pthread_mutex_unlock()
  • pthread_mutext_lock는 임계 구역에 진입하기 전에 호출해서 다른 스레드의 진입을 막는다.
  • pthread_mutext_unlock는 임계 구역에서의 작업이 끝나고 호출해서 다른 스레드가 접근할 수 있도록 한다.

예제

pthread_mutex_t lock;
pthread_mutex_lock(&lock);
shared_data++;
pthread_mutex_unlock(&lock);

 

 

🔹 세마포어

  • 특징 : 여러 개의 프로세스가 자원을 제한적으로 사용할 수 있도록 관리
  • 사용 : sem_wait() / sem_post()

예제

#include <semaphore.h>
sem_t sem;
sem_wait(&sem); // 자원 사용 시작
// 공유 자원 접근
sem_post(&sem); // 자원 해제

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 페이징  (0) 2025.02.13
[CS] 가상 메모리  (0) 2025.02.13
[CS] CPU 스케줄링  (0) 2025.02.11
[CS] 스레드  (0) 2025.02.11
[CS] 프로세스 계층 구조  (0) 2025.02.11
CPU 스케줄링은 운영체제에서 프로세스가 CPU를 사용할 수 있도록 할당하는 메커니즘을 말한다.
CPU는 한 번에 하나의 프로세스만 실행할 수 있기 때문에,
여러 프로세스가 실행 대기 중일 때 운영체제는 적절한 알고리즘을 사용하여 어떤 프로세스를 먼저 실행할지 결정해야 한다.

 

📌 스케줄러 종류

운영체제에는 다양한 스케줄러가 있다.
CPU 스케줄링과 직접적으로 관련된 것은 단기 스케줄러다.

 

🔹 장기 스케줄러( Long-term Scheduler )

  • 어떤 프로세스를 실행할지 결정하여 준비( Ready )큐로 이동시킨다.
  • 시스템의 전체적인 프로세스 수를 조절하여 CPU와 메모리 자원의 균형을 맞춘다.

🔹 단기 스케줄러( Short-term Scheduler )

  • CPU를 어떤 프로세스에 할당할지를 결정한다.
  • 실행 가능한 프로세스 중 하나를 선택하여 CPU를 할당한다.

🔹 중기 스케줄러( Medium-term Scheduler )

  • 실행 중인 프로세스를 일시 중단( Suspend )하거나 다시 활성화( Resume)하는 역할을 담당한다.
  • 메모리 관리 및 스왑( Swap ) 관련 작업을 수행한다.

📌 CPU 스케줄링 방식

CPU 스케줄링 방식은 크게 비선점( Non-preemptive )과 선점( Preemptive ) 방식으로 나뉜다.
  • 비선점( Non-preemptive ) 방식: 프로세스가 CPU를 할당받으면, 자발적으로 종료하거나 I/O 요청을 하기 전까지 CPU를 다른 프로세스가 사용할 수 없다.
  • 선점( Preemptive ) 방식: 특정 조건이 발생하면 현재 실행중인 프로세스를 중단하고 CPU를 다른 프로세스에 할당할 수 있다.

📌 주요 CPU 스케줄링 알고리즘

🔹 FCFS( First-Come, First-Served, 선입 선처리 스케줄링 )

  • 먼저 도착한 프로세스부터 실행한다.
  • 호위 효과( Convoy Effect )가 발생할 수 있다.
    • 긴 작업이 짧은 작업을 지연시키는 현상

🔹 SJF( Shortest Job First, 최단 작업 우선 스케줄링 )

  • 실행 시간이 가장 짧은 프로세스를 먼저 실행한다.
  • 평균 대기 시간을 최소화하지만, 실행 시간을 정확히 예측하기 어렵다.
  • 선점형과 비선점형 방식이 있다.

🔹 RR( Round Robin, 라운드 로빈 스케줄링 )

  • 각 프로세스가 일정한 시간( Time Quantum ) 동안 CPU를 할당받고, 시간이 지나면 다음 프로세스로 교체된다.
  • 타임슬라이스의 시간이 너무 크면 FCFS와 유사해지고, 너무 작으면 문맥 교환 오버헤드가 증가한다.

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 가상 메모리  (0) 2025.02.13
[CS] 동기화  (0) 2025.02.12
[CS] 스레드  (0) 2025.02.11
[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11

📌 스레드

프로세스를 구성하는 실행의 흐름 단위다.
하나의 프로세스는 여러 개의 스레드를 생성하여 병렬 또는 동시 실행을 수행 할 수 있다.

 

1️⃣ 스레드의 개념

스레드는 운영체제에서 최소 실행 단위로 간주되고, '프로세스'내에서 실행되는 서브 작업( Subtask )이다.

모든 쓰레드는 동일한 메모리 공간(= 주소공간)을 공유한다.

 

2️⃣ 스레드의 유형

  1. 커널 스레드( Kernel Thread )
    • 운영 체제가 직접 관리하는 스레드
    • 커널이 스케줄링을 담당하며, 시스템 호출을 통해 생성 및 관리한다.
    • 커널 모드에서 실행되므로 성능 오버헤드가 발생할 수 있다.
  2. 사용자 스레드( User Thread )
    • 사용자 수준에서 관리되는 스레드
    • 커널의 개입 없이 사용자 프로그램이 직접 스레드를 생성 및 관리한다.
    • 커널이 관여하지 않아서 문맥 전환 비용이 낮다
    • 하지만 커널이 단일 스레드로 인식해서 한 스레드가 블록되면 전체 프로그램이 멈출 수 있다.

3️⃣ 스레드의 장점과 단점

 ✅ 장점

  • 프로세스보다 가볍고, 프로세스 문맥 전환에 비해 스레드 문맥 전환이 비용이 적다.
  • 동일한 프로세스 내에서 메모리 및 자원을 공유하여 효율적인 데이터 교환이 가능하다.

 ❌ 단점

  • 여러 스레드가 동일한 자원에 접근하면 데이터 충돌이 발생할 수 있다.
  • 과도한 스레드 생성 시 문맥 전환 비용이 증가하여 성능이 저하 될 수 있다.

📌스레드 자원

1️⃣ 스레드가 공유하는 자원

앞서 언급한대로 스레드는 같은 프로세스에 속하기 때문에 메모리 공간과 일부 시스템 자원을 공유한다.

  1. 코드( Code ) 영역
  2. 데이터( Data ) 영역
  3. 힙( Heap ) 영역
  4. 파일 디스크립터

위 4가지를 프로세스 내에서 스레드들이 모두 공유한다.

2️⃣ 스레드가 독립적으로 가지는 자원

  1. 레지스터
  2. 스택

정리

자원 공유 여부 설명
코드 영역 ✅ 공유 모든 스레드가 같은 명령어 실행 가능
데이터 영역 ✅ 공유 전역 변수, static 변수
힙 영역 ✅ 공유 malloc(), new 로 할당한 동적 메모리
파일 디스크립터 ✅ 공유 파일, 소켓, 파이프 공유
레지스터 ❌ 독립 프로그램 카운터, 스택 포인터 등
스택 ❌ 독립 지역 변수, 함수 호출 정보

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 동기화  (0) 2025.02.12
[CS] CPU 스케줄링  (0) 2025.02.11
[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10

📌 프로세스 계층구조

Windows 운영체제에서는 프로세스가 계층 구조를 가지지 않지만,
다른 수 많은 운영체제는 프로세스가 계층 구조를 가지기 때문에 알아둬야 할 필요가 있다.

 

⚠️ 아래 내용은 Winsdows 운영체제는 해당 하지 않음


✅ 운영체제에서 부모-자식 관계를 기반으로 트리( Tree ) 구조를 형성하는 방식이다.

  • 모든 프로세스는 부모 프로세스에 의해 생성되고, 새로 생성된 프로세스는 자식 프로세스가 된다.
  • 최상위 부모는 init( 또는 systemd ) 프로세스( PID 1 )
  • 계층 구조는 ps 명령어나 pstree 명령어를 사용해 확인이 가능하다.
  • 부모 프로세스와 자식 프로세스는 엄연히 다른 프로세스라서 각기 다른 PID를 가진다. ( 일부 운영체제에서는 자식 프로세스의 PCB에 부모 프로세스의 PID인 PPID( Parent PID )가 기록되기도 한다.

📌 프로세스 생성 기법

부모 프로세스가 자식 프로세스를 어떻게 만들어 내고, 자식 프로세스는 어떻게 자신만의 코드를 실행하는지 알아보자

 

부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다.

📝 1. fork()를 이용한 계층 구조 유지( 복제 )

fork()는 현재 실행 중인 프로세스를 복제하여 새로운 자식 프로세를 생성한다.

  • 부모 프로세스가 fork()를 호출하면, 자식 프로세스가 생성되며 부모-자식 관계가 유지된다.
  • 자식 프로세스는 부모의 메모리 공간을 복사하지만, 독립적으로 실행된다.
  • 자식 프로세스는 새로운 PID를 가지고, 부모의 PID를 PPID로 가진다.

📝 2. exec()을 이용한 새로운 프로그램 실행( 옷 갈아 입기 )

exec()는 새로운 프로그램을 실행하며, 기존 프로세스의 주소 공간을 새로운 프로그램으로 교체한다.

  • fork() 후 exec()을 호출하면 새로운 프로세스를 생성하면서 새로운 프로그램으로 실행이 가능하다.
  • 자식 프로세스는 기존 부모 프로세스와 계층 구조를 유지하지만, 실행 코드가 변경된다.

'CS > 혼공컴운' 카테고리의 다른 글

[CS] CPU 스케줄링  (0) 2025.02.11
[CS] 스레드  (0) 2025.02.11
[CS] 프로세스 상태  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10
[CS] 문맥 교환  (0) 2025.02.10
프로세스는 실행되는 동안 CPU 스케줄링, I/O 대기, 실행 중단 등의 다양한 상황을 거친다.
운영체제는 이러한 상황을 효과적으로 관리하기 위해 프로세스의 상태를 PCB를 통해 인식하고 관리한다.

 

📌  프로세스의 주요 상태

운영체제마다 다소 차이는 있지만, 일반적으로 프로세스는 다음과 같은 상태를 가진다.

 

1️⃣ 생성 상태( New )

  • 프로세스가 생성되고, 이제 막 메모리에 적재되어 PCB를 할당 받은 상태를 말한다.
  • 생성 상태를 거쳐, 실행 준비가 완료된 프로세스는 곧바로 실행되지는 않고, 준비 상태가 되어 CPU의 할당을 기다린다.

2️⃣ 준비 상태( Ready )

  • CPU를 할당받아 실행할 수 있지만, 아직 할당받지 못한 상태를 말한다.
  • 여러개의 프로세스가 동시에 준비 상태가 될 수 있고, 운영체제의 스케줄러( Scheduler )가 이들 중 하나를 선택하여 실행한다.

3️⃣ 실행 상태( Running )

  • CPU를 할당받아 실행 중인 상태를 말한다.
  • 실행 상태인 프로세스는 할당된 일정 시간 동안만 CPU를 사용할 수 있다.
  • 할당된 시간을 모두 사용하면 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날때까지 대기 상태가 된다.

4️⃣ 대기 상태( Waiting / Blocked )

  • 프로세스가 실행되던 중 I/O 작업( 예: 디스크 읽기, 네트워크 요청 )이 발생하거나 특정 이벤트( 예: 동기화 변수 )가 발생하면 대기하는 상태를 말한다.
  • 입출력 완료 인터럽트를 받을 때까지 대기하고, 이 동안은 CPU를 점유하지 않는다.
  • 입출력 완료 인터럽트를 받아 I/O 요청이 완료되면 다시 준비 상태가 된다.

5️⃣ 종료 상태( Terminated )

  • 프로세스가 실행을 완료하거나, 오류 또는 강제 종료에 의해 더 이상 실행되지 않는 상태를 말한다.
  • 운영체제는 종료된 프로세스의 메모리 및 리소스를 해제하고, PCB를 정리한다.

📌 프로세스 상태 전이( State Transition )

프로세스는 실행 중 다음과 같은 상태 변화를 겪는다.

 

1️⃣ 생성 ▶ 준비 ( New ▶ Ready )

  • 새로운 프로세스가 생성되면, 실행을 위해 준비 상태( Ready )로 이동한다.

2️⃣ 준비 ▶ 실행 ( Ready ▶ Running )

  • CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 선택하여 CPU를 할당하면 실행 상태( Running )로 이동한다.

3️⃣ 실행 ▶ 준비 ( Running ▶ Ready )

  • 프로세스가 CPU 시간을 초과했거나, 우선순위가 높은 다른 프로세스가 스케줄링될 경우 다시 준비 상태( Ready )로 이동한다.

4️⃣ 실행 ▶ 대기 ( Running ▶ Waiting )

  • 프로세스가 I/O 요청으로 인해 CPU 사용을 중단해야 할 경우, 대기 상태( Waiting )로 이동한다.

5️⃣ 대기 ▶ 준비 ( Waiting ▶ Ready )

  • 대기 상태에 있던 프로세스가 I/O 작업이 완료되거나 필요한 이벤트가 발생하면, 다시 준비 상태( Ready )로 이동한다.

6️⃣ 실행 ▶ 종료 ( Running ▶ Terminated )

  • 프로세스가 정상적으로 실행을 마치거나, 오류 또는 강제 종료되면 종료 상태( Terminated )로 이동한다.

📌 추가적인 프로세스 상태

중단 상태( Suspended )

프로세스가 일시적으로 메모리에서 제거되고 보조 저장장치( 디스크 등 )에 저장된 상태를 말한다.
  • 메모리에서 프로세스가 제거된 상태( 보조 기억장치로 스왑됨 )
  • CPU를 포함한 모든 자원을 사용하지 않는다.
  • 운영체제가 직접 상태를 변경한다.

중단 상태( Suspended ) 상태가 필요한 이유

일반적인 프로세스 상태( Running, Ready, Waiting )와 달리, Suspended 상태는 프로세스가 '실행할 수 없는 상황'을 말한다. 운영체제는 아래와 같은 이유로 프로세스를 중단 상태로 전환한다.

 

1️⃣ 메모리 부족( Swapping, 스왑 아웃 )

  • RAM이 부족할 때, 운영체제는 일부 프로세스를 디스크로 옮겨 메모리를 확보한다.
  • 보통은 오랫동안 실행되지 않은 프로세스가 먼저 중단된다.
  • 메모리가 다시 확보되면, 프로세스는 디스크에서 다시 RAM으로 복원( Swapping In )되어 Ready 상태로 변경된다.

2️⃣ 외부 자원의 문제( I/O 장치 사용 불가 )

  • 프로세스가 특정 하드웨어( 프린터, 네트워크, 디스크 등 )를 기다리고 있는데, 장치가 사용할 수 없는 상태라면 운영체제는 해당 프로세스를 Suspended 상태로 변경한다.
  • 자원이 사용 가능해지면 다시 Ready 상태로 복귀한다.
    • 프린터 대기열에 있는 작업이, 프린터가 오프라인 상태라서 처리되지 못하는 경우
    • 네트워크가 끊겨 다운로드 중이던 프로그램이 일시 정지 되는 경우

 

'CS > 혼공컴운' 카테고리의 다른 글

[CS] 스레드  (0) 2025.02.11
[CS] 프로세스 계층 구조  (0) 2025.02.11
[CS] 프로세스의 메모리 영역  (0) 2025.02.10
[CS] 문맥 교환  (0) 2025.02.10
[CS] 프로세스 개요  (0) 2025.02.10

+ Recent posts