[운영체제] 반효경 교수님 OS 정리 (2)

KWAK-JINHO·2025년 4월 8일
post-thumbnail

✏️ 프로세스

프로세스는 실행 중인 프로그램을 의미하며, 다음과 같은 특징을 가집니다

  • 실행 시작 시 독자적인 주소 공간 생성 (stack, data, code)
  • CPU를 할당받으면 프로그램 카운터(PC)가 코드의 특정 부분을 가리킴
  • 매 순간 명령어(인스트럭션)를 하나씩 읽어 CPU에서 처리
  • 레지스터에 값을 저장하고 연산 후 결과를 다시 레지스터나 메모리에 저장

문맥의 종류

프로세스 문맥이란 프로세스가 현재 어떤 상태에 있는지를 정확하게 규명하는 정보입니다. 이는 프로세스가 어디까지 실행되었는지를 나타내며 다음과 같은 정보를 포함합니다

문맥의 종류

  1. 하드웨어 문맥

    • CPU 레지스터 값들
    • 프로그램 카운터(PC) 상태
    • 현재 실행 중인 명령어 위치
  2. 프로세스 주소 공간

    • 코드, 데이터, 스택 영역의 내용
  3. 커널 관련 문맥

    • PCB(Process Control Block)와 커널 스택
    • 프로세스가 시스템 콜 등으로 커널 모드에서 수행한 작업 정보

프로세스의 상태

  • 실행(Running): CPU를 잡고 명령을 수행 중인 상태
    👉 커널모드에서 러닝중이라고 표현, 운영체제가 running 한다고 표현하지 않는다.

  • 준비(Ready): 메모리에 프로그램이 올라가 있지만, CPU가 없어서 기다리는 상태

  • 봉쇄(Blocked(wait, sleep)): CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태, 프로세스 자신이 I/O 요청했기 때문에 기다리는 상태.

  • 정지(Suspend): CPU뿐 아니라 외부에서 이프로세스를 강제로 정지한 상태 프로세스가 통째로 Swap-out된 상태.

  • 시작(New): 프로세스가 생성중인 상태

  • 완료(Terminated): 수행이 끝난 상태

✏️ Process Control Block (PCB)

프로세스 제어 블록이란 운영 체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널 내의 자료 구조

PCB 구성요소

OS가 관리 상 사용하는 정보

  • 프로세스 상태, 프로세스 ID, CPU 스케줄링 정보, 프로세스 우선 순위 등

CPU 수행 관련 하드웨어 값

  • 프로그램 카운터, 레지스터 등

메모리 관련

  • code, data, stack의 위치 정보 등

파일 관련

  • 프로세스가 오픈한 파일 정보

✏️ 문맥교환

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU를 뺏기면 정보를 세이브하고 넘겨줄 때도 정보를 세이브해뒀던것을 복원해서 넘겨준다.
OS가 CPU를 다른 프로세스에게 넘겨주면 문맥교환이 일어난다.

👉 시스템 콜이나 인터럽트가 발생하면 항상 문맥 교환이 일어나는가?
정답은 ❌❌❌

  • 시스템콜이 발생하면 유저모드 -> 커널모드로의 전환을 수반하지만, 현재 프로세스가 계속 CPU를 사용하는 경우에는 문맥 교환이 발생하지 않는다.
  • 또한 대부분의 인터럽트의 경우에도 처리 후 원래 실행 중이던 프로세스로 다시 돌아가므로 문맥 교환은 발생하지 않는다.

✏️ 프로세스를 스케줄링하기 위한 큐

Job Queue

  • 현재 시스템 내에 있는 모든 프로세스 집합이다. (Ready Queue + Device Queues)

Ready Queue

  • 현재 메모리에 있으면서 CPU를 잡아서 실행되기를 기다리는 준비 상태의 프로세스 집합이다.

Device Queues

  • I/O 디바이스의 처리를 기다리는 봉쇄 상태의 프로세스 집합이다

✏️ 스케쥴러

Long-term schedular

어떤 프로세스를 실행할지 결정하는 스케줄러

  • 디스크 등에 있는 Job(작업)을 메모리로 올릴지 결정한다.
  • 실행빈도가 매우낮고, 현대에는 거의 사용되지 않는다.

📌 degree of multiprogramming 제어

  • 메모리에 동시에 존재하는 프로세스의 수를 의미한다.
  • CPU와 I/O 자원을 최대한 활용하기 위한 기법으로, 여러 프로세스를 메모리에 적재해 CPU가 놀지 않도록 하는 것이 목적

Long-term Scheduler의 역할

  • 새로운 프로세스를 메모리에 적재할지 결정.
  • 시스템이 과부하 상태라면, 새로운 프로세스의 진입을 제한하여 degree를 낮춘다.
  • 반대로 프로세스가 너무 적어 CPU가 놀고 있다면, 새로운 작업을 허용해 degree를 높인다.

Medium-term Scheduler(=swapper)

일시 중단된 프로세스를 메모리에서 제거하거나 다시 복귀시키는 스케줄러

  • 스왑 아웃(Swap Out): 메모리 부족 시 프로세스를 디스크로 내림
  • 스왑 인(Swap In): 다시 실행할 때 메모리로 복귀
  • Suspended(stopped)상태 관리

👉 메모리 관리와 관련이 깊으며, 멀티태스킹 성능 최적화에 사용된다.

short-term schedular

어떤 프로세스에게 CPU를 줄지 즉시 결정하는 스케줄러

  • Ready Queue에 있는 프로세스들 중에서 선택
  • 문맥 교환을 유발할 수 있음

👉 가장 핵심적인 스케줄러이며, 우리가 흔히 말하는 "CPU 스케줄링"을 뜻한다.

✏️ Thread란?

  • 프로세스 내에서 실행 되는 여러 흐름의 단위 혹은 프로세스가 할당 받은 자원을 이용하는 실행 흐름의 단위

Thread의 구성

  • program counter: 명령어 실행을 위해 code의 어느부분을 실행하고 있는지 가리킨다.
  • register set
  • stack space

Thread가 다른 Thread와 공유하는 부분

Thread 끼리 주소영역의 data, code 영역은 공유하되 stack은 별도로 할당 받는다. PCB에서는 program counter와 register set을 제외한 프로세스 관련 정보 및 자원을 모두 공유한다.

Thread의 장점

응답성

  • 다중 쓰레드로 구성된 Task 구조에서 하나의 thread가 blocked되어도 동일한 Task내의 다른 thread는 실행된다.

자원 공유 (Resource Sharing)

  • 하나의 프로세스 안에 CPU 수행 단위인 쓰레드를 두게 되면 code, data, resource 자원을 공유하여 효율적으로 자원 활용이 가능

경제성

  • 동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
  • 새로운 프로세스 하나를 만드는 것 보다 기존의 프로세스에 쓰레드를 추가하는 것이 오버헤드가 훨씬 적다.

멀티 프로세서 아키텍처에서의 이용성

  • 각 스레드는 각각 다른 CPU를 가지고 병렬적으로 수행가능

Thread의 단점

  • 자원의 공유로 인한 동기화 문제가 발생할 수 있다.
  • 디버깅이 까다롭다.

Thread의 구현

Kernel Threads

  • 운영체제가 스레드를 관리

User Threads

  • 사용자 프로세스가 스레드를 관리
profile
매일 더 나은 내가 되자

0개의 댓글