2025. 4. 1. 20:41ㆍ개발/💻 CS 지식
Process
: 실행 중인 프로그램
Context
: Process의 문맥 ( 현재 상태, 과거 기록 )
Context 종류
- 하드웨어 문맥 : CPU 수행 상태
-> Program Counter : CPU가 다음에 실행할 명령어의 주소 저장 - 프로세스의 주소 공간인 code를 가르키고 있음
-> Register : CPU 연산에 필요한 데이터 저장
- 프로세스의 주소 공간 : code, data, stack
- 프로세스 관련 커널 자료 구조 : 커널(OS) 또한 함수를 통해 작동하기 때문에 관련 데이터를 저장하는 자료 구조(주소 공간)이 존재함
-> PCB(Process Control Block) : 커널의 주소 공간인 data 내에 있음
-> Kernel Stack : 커널의 주소 공간인 stack 내에 있음
=> 프로세스별로 별도의 PCB와 Kernel Stack 존재
Process의 상태
- Running : CPU를 잡고 instruction을 수행 중인 상태
- Ready : CPU를 기다리는 상태, 앞선 프로세스가 완료되면 바로 실행할 수 있도록 인메모리 상태
- Blocked(wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태, Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
- New : 프로세스가 생성 중인 상태
- Terminated : 수행이 끝난 상태
=> PCB에 Process의 상태 저장됨
PCB (Process Control Block)
: 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
: PCB는 커널의 Data 영역에 저장됨
: PCB 내의 정보는 구조체 형태로 저장됨
PCB 구성요소
( 1 ) OS가 관리상 사용하는 정보
- Process ID, Process State : 어떤 프로세스에 대한 PCB인지, 프로세스가 어떤 상태인지
- Scheduling Information, Priority : 스케줄링 정보, 우선순위
( 2 ) CPU 수행 관련 하드웨어 값
- Program Counter, Register : CPU가 다음에 수행해야 할 명령어 주소, CPU 연산에 필요한 데이터
( 3 ) 메모리 관련
- Code, Data, Stack의 위치 정보 : 해당 프로세스에 대한 code, stack, data의 주소
( 4 ) 파일 관련
- Open File Descriptors
Context Switch
: 문맥 교환 -> CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- Context Switch가 일어날 때 CPU가 수행하는 일
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
[ System Call이나 Hardware Interrupt 발생시 반드시 context switch가 일어나는 것은 아니다 ]
(1)의 경우 인터럽트/시스템콜 전후의 프로세스가 그대로 유지되고 user mode와 kernel mode 사이의 전환만 발생했다
(2)의 경우 timer interrupt(CPU 제어권을 다른 프로세스에게 넘기기 위한 인터럽트), I/O system call(I/O 작업은 시간이 오래 걸리기 때문에 현재 프로세스의 상태를 blocked로 바꾸고 다른 프로세스로 CPU 제어권을 넘김) 전후의 프로세스가 서로 다르다
이때 (1)과 (2) 모두 PCB에 context를 저장해야 하지만, (2)의 경우 문맥 교환을 하기 때문에 overload가 훨씬 크다
프로세스를 스케줄링하기 위한 큐
Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
Ready Queue : 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합
Device Queue : I/O device의 처리를 기다리는 프로세스의 집합
- Kernel 주소 공간 중 Data에 큐가 저장되며 프로세스의 상태를 바꿔가며 CPU의 제어권을 분배한다
- 프로세스들은 각 큐들을 오가며 수행된다
- Ready Queue : CPU의 제어권을 기다리는 프로세스들이 저장됨 (ready)
- I/O Queue : I/O device의 처리를 기다리는 프로세스들이 저장됨 (blocked)
Scheduler
: 운영체제의 함수 중 하나로, 프로세스의 상태 및 메모리 관리를 수행한다
Scheduler 종류
- Long-term Scheduler(장기 스케줄러, job scheduler)
: 시작 프로세스(new) 중 어떤 것들을 ready queue로 보낼지 결정
: 프로세스에 memory를 주는 문제
: degree of Multiprogramming(메모리에 프로그램 몇개 올라가는지) 제어
: time sharing system에는 보통 장기 스케줄러가 없음 (프로세스 생성되자마자 ready 상태)
- Short-term Scheduler(단기 스케줄러, CPU scheduler)
: 어떤 프로세스를 다음에 running시킬지 결정
: 프로세스에 CPU를 주는 문제
: 충분히 빨라야 함
- Medium-term Scheduler(중기 스케줄러, Swapper)
: degree of Multiprogramming을 제어하기 위해서 프로세스를 통째로 메모리에서 디스크로 쫓아냄
프로세스 상태도(더 상세한 버전)
Running(user mode) : 현재 CPU에서 돌아가고 있는 프로세스
Running(kernel mode) : 사용자 프로그램에서 System call(커널 함수 호출), Interrupt(ex - I/O에서 일 다했다고 알림)가 발생해서 OS로 제어권이 넘어간 상태
Blocked : 사용자 프로그램이 당장에 돌아갈 수 없는 상태(ex - 사용자 프로그램 내에서 I/O 요청 System call을 한 상태)
Ready : CPU의 제어권이 넘어오길 기다리는 상태
Suspended Blocked : Blocked 상태에서 Mid-term Scheduler에 의해 디스크로 쫓겨난 상태
Suspended Ready : Ready 상태에서 Mid-term Scheduler에 의해 디스크로 쫓겨난 상태
- Running -> Ready : Timer Interrupt
- Ready -> Running : Scheduler dispatch
- Running -> Blocked : 사용자 프로그램에서 I/O 요청
- Blocked -> Ready : I/O 완료 interrupt
- Suspended Blocked -> Suspended Ready : I/O 완료 interrupt
Thread
: 프로세스의 실행 단위이자, CPU의 수행 단위
Thread 구성
- Program Counter
- Register Set
- Stack Space
Thread가 동료 Thread와 공유하는 부분( = task)
: 주소 공간의 Code, Data 영역
PCB에서는 PC와 Register를 제외한 프로세스 관련 데이터를 모두 공유한다
Thread의 장점
- Responsiveness(응답성)
: 다중 Thread로 구성된 태스크 구조에서는 하나의 서버 Thread가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 Thread가 실행되어 빠른 처리를 할 수 있다
- Resource Sharing (자원 공유)
- Economy(경제성)
: 동일한 일을 수행하는 다중 Thread가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다
- Utilization of MP Architectures(병렬성)
: 여러 CPU를 사용할 때 작업을 병렬적으로 처리 가능하다
Thread의 실행
- Kernel Threads
- User Threads
- Real Time Threads
'개발 > 💻 CS 지식' 카테고리의 다른 글
[ 운영체제 ] CPU Scheduling (0) | 2025.04.13 |
---|---|
[ 운영 체제 ] Process Management (0) | 2025.04.12 |
[ 운영체제 ] 컴퓨터 시스템 구조 & 프로그램의 실행 (0) | 2025.03.22 |
[ 운영체제 ] 운영 체제 개요 (0) | 2025.03.10 |
🍪 쿠키 (1) | 2025.03.06 |