- 프로세스
- program in execution = 실행중인 프로그램
- 프로세스의 문맥(context)이 중요
- 프로세스 context
- 특정 시점에서 프로세스가 어디까지 수행했는지, stack/data/code와 PC와 register 등 어떤 상태인지
- 프로세스의 현재 상태를 정의
- 1. CPU 수행 상태를 나타내는 하드웨어 문맥
- PC, register
- 이 프로세스가 instruction을 어디까지 실행했는지 - 2. 프로세스의 주소 공간
- code, data, stack
- 현 시점의 프로세스 주소공간에 어떤 내용이 들어가 있는가 - 3. 프로세스 관련 커널 자료구조
- PCB, 커널 스택
- 프로세스가 실행될 때마다 운영체제가 PCB를 하나씩 두고 관리
- 시스템 콜이 발생할 때마다 커널에서 stack으로 관련 정보를 작성
- 프로세스의 context가 중요한 이유
- 현대 운영체제는 프로세스가 특정 시간 CPU를 점유하고나면 다른 프로세스를 실행함
- 이 때 이 프로세스의 상태를 정확하게 기억해야 다시 실행할 때 문제가 없음
- 프로세스의 상태
- Running
- 컴퓨터에 CPU가 하나만 있다면, CPU가 잡고 있는 프로세스는 매 순간 하나
- CPU를 점유하여 instruction이 실행중인 프로세스의 상태
- Running에서 상태가 변하는 경우
- I/O와 같은 event 발생으로 자진해서 CPU를 반납 -> waiting(Blocked)
- Timer에서 인터럽트로 인해 반납 -> ready
- Ready
- CPU를 기다리는 프로세스의 상태
- CPU에서 바로 실행할 수 있도록, 메모리에 load하는 등 다른 준비는 끝난 상태
- CPU만 할당하면 바로 실행
- Blocked
- CPU를 줘도 당장 instruction을 실행할 수 없는 상태
- ex) 프로세스가 요청한 event(I/O)가 즉시 만족되지 않아 기다리는 상태
- ex) swap 영역의 instruction을 실행하여 바로 실행할 수 없는 상태
- 그 외
- New : 프로세스가 생성 중인 상태
- Terminated : 프로세스가 수행이 끝나서 정리중인 상태
- Running
- 프로세스의 상태 변화 예시
- CPU에 할당된 프로세스는 Running
- 할당된 시간이 종료되면, Timer의 인터럽트로 인해 Ready Queue로 옮겨져서 Ready
- Running 중에 디스크에서 읽어올 데이터가 있으면 Disk I/O 관련 Queue로 옮겨져서 Blocked
- I/O 뿐 만 아니라, 공유 데이터에 접근해야할 시 해당 Resource에 관련된 Queue로 옮겨져서 Blocked
- 해당 작업이 완료가 되면 Ready Queue로 옮겨져서 Ready
- Process Control Block (PCB)
- 운영체제에서 프로세스의 상태를 관리하기위해 저장하는 정보
- 1. OS가 관리하기위해 사용하는 정보
- 프로세스 상태
- 프로세스 ID
- 스케줄링 정보
- 우선순위 -> 운영체제는 RR인 것 같지만, 우선순위가 높은 프로세스에게 더 빨리 CPU를 줌
- CPU의 문맥을 표시하기 위한 값들
- 2. CPU 수행 관련 하드웨어 값
- 3. 메모리
- 4. 파일
- 문맥 교환 (Context Switch)
- CPU를 하나의 사용자 프로세스에서 다른 사용자 프로세스로 넘겨주는 과정
- 프로세스의 상태(문맥)를 정확히 기억하고 있어야함
- 이 문맥(PCB)를 저장하기 위해 커널의 주소공간 data 영역에 공간이 있음
- 문맥 교환의 헷갈리는 개념
- System call이나 interrupt가 발생한다고 해서 context switching이 일어나는 것은 아니다
- 문맥 교환의 정의 : 하나의 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 것
- system call과 interrupt는 사용자 프로세스에서 운영체제에게로 CPU가 넘어감
- interrupt 이 후, 이전에 실행중이던 프로세스가 아닌 다른 사용자 프로세스에게 CPU가 넘어가면 context switching이 일어남 (Timer interrupt)
- 커널 모드로 들어가는 것도 메모리영역과 같이 어느 정도 문맥이 바뀌지만, 프로세스 A에서 프로세스 B로 CPU가 전부 바뀌는 것보다 오버헤드가 적다
- 예를 들면, 프로세스가 바뀌면 이전 프로세스가 사용하던 캐시 메모리를 모두 삭제
- 프로세스 스케줄링 큐
- 프로세스를 큐에 줄 세운다는 것은 PCB를 줄세운다는 것
- Job queue
- 모든 프로세스 큐 - Ready queue
- ready 상태의 프로세스들의 큐 - Device queue
- I/O 처리를 기다리는 프로세스의 큐
- 스케줄러
- 1. CPU scheduler (Short-term scheduler, 단기 스케줄러)
- 굉장히 빠른 주기로 스케줄링이 이루어져서 short-term
- 어떤 프로세스에게 CPU를 줄지를 결정
- 2. Job scheduler (Long-term scheduler, 장기 스케줄러)
- 프로세스가 시작될 때 메모리를 줄지말지 결정하는 스케줄러
- 프로세스의 상태가 new -> ready가 될 때 이루어지는 일
- 프로세스가 메모리를 얻지 못하면 아무것도 못함
- 메모리가 올라오는 것을 허락(admitted)해주면 비로소 ready 상태가 됨
- 이를 관리하는 것이 Job scheduler - degree of Multiprogramming 제어 : 메모리에 올라가는 프로세스의 수를 관리
- 메모리에 너무 적은 프로세스가 올라오면 컴퓨터 성능이 안좋음
- 프로세스가 I/O 하러 가면 아무 프로그램도 실행되지 않음
- 메모리에 너무 많은 프로세스가 올라와도 컴퓨터 성능이 안좋음
- 프로세스들에게 할당된 메모리가 적어, 당장 실행할 명령어도 메모리에 안올라와서 I/O하러감 - 그러나 현대 운영체제에는 Job scheduler가 없다고 함 (degree of Multiprogramming은 중기 스케줄러로 조절)
- 3. Swapper (Medium-term scheduelr, 중기 스케줄러)
- 현대 운영체제는 프로그램을 실행시키면 일단 모두 메모리에 올림
- degree of Multiprogramming 제어
- 메모리에 너무 많은 프로세스가 올라오면, 프로세스를 통째로 디스크로 쫓아냄 - 중기 스케줄러로 인해, 프로세스의 상태에 Suspended가 추가됨
- Suspended(stopped) : 프로세스가 통째로 디스크에 swap out되어 정지된 상태
- 1. CPU scheduler (Short-term scheduler, 단기 스케줄러)
- Blocked vs Suspended
- Blocked는 I/O와 같이 자신이 요청한 event에 의해 멈춰진 상태
- Blocked는 event가 완료되면 Ready Queue로 옮겨짐
- Suspended는 외부에 의해서 stop된 상태
- Suspended는 외부에서 재개 시켜줘야 active한 상태로 옮겨질 수 있음
- 외부 : 중기 스케줄러, 리눅스에서 ctrl+z를 누르면 프로세스를 일시중지 시킬 수 있음 -> 사람이 다시 재개 시켜야함
- Running 상태가 2개
- Running(user mode)
- user mode에서 프로세스가 실행 중일 때 - Running(monitor mode)
- System call 등으로 운영체제 코드가 실행 중일 때
- "운영체제가 실행중이다"라고 말하지 않음
- 이 프로세스가 "커널 모드에서 실행중이다"라고 함 - 외부의 인터럽트는?
- 외부의 인터럽트로 인해 ISR이 실행되더라도, 이 프로세스는 커널 모드에서 실행중이다라고 함
- Running(user mode)
- Suspended 상태가 2개
- Blocked에서 swap out되면 Suspended Blocked
- Ready에서 swap out되면 Suspended Ready
- 만약 Suspended Blocked에서 이벤트가 끝나면 Suspended Ready로 이동 가능
'CS > 운영체제' 카테고리의 다른 글
[운영체제] KOCW 반효경 교수님 강의 - 7. Process 3 (0) | 2022.03.30 |
---|---|
[운영체제] KOCW 반효경 교수님 강의 - 6. Process 2 (0) | 2022.03.28 |
[운영체제] KOCW 반효경 교수님 강의 - 4. System Structure & Program Execution 2 (0) | 2022.03.27 |
[운영체제] KOCW 반효경 교수님 강의 - 3. System Structure & Program ExeCution 1 (0) | 2022.03.11 |
[운영체제] KOCW 반효경 교수님 강의 - 2. Introduction to Operating System (0) | 2022.03.11 |