##본 포스팅은 운영체제 강의 '이화여자대학교 운영체제 강의 - 반효경 교수님'를 보고 정리한 내용입니다.
프로세스란
> 프로세스
실행 중인 프로그램 (program in execution)
> 프로세스의 문맥
프로세스의 출생부터 사망까지를 봤을 때, 현재 시점에서 프로세스가 어떤 상태에 있느냐가 "프로세스의 문맥"이다.
CPU를 얼마나 썼는가, 메모리를 얼마나 가지고 있었는가 등을 의미한다.
- CPU에서 어디까지 실행했는가(하드웨어 문맥)
Program Counter, 각종 register - 프로세스의 주소 공간
code, data, stack - 프로세스 관련 커널 자료 구조
PCB(Process Control Block), Kernel stack
> 프로세스의 상태
기본적으로 아래 세 상태로 분류할 수 있다.
- CPU에서 실행되고 있는 프로세스 -> running
- CPU를 쓰고 싶지만, 기다리고 있는 프로세스 -> ready
- 오래걸리는 작업때문에 CPU를 줘도 무의미한 상태, 자신이 요청한 event(i/o)가 만족되지 않아 기다리는 상태 -> blocked, wait
여러 큐**를 두고 프로세스를 관리하게 되며
이러한 상태는 interrupt 등을 통해 상태가 변하게 된다.
참고로 오래걸리는 작업은 i/o 외에도 공유 데이터 사용 시 등이 포함된다.
프로세스가 생성 중인 상태를 new라 부르며,
온전히 프로세스가 되면 ready이고 메모리에 올라가게 된다. 여기서 cpu를 바로 주면 실행이 된다.
cpu 스케줄러가 ready인 프로세스에게 cpu를 주면 running이 된다.
- cpu를 쓰고 싶더라도 타이버 인터럽트로 인해 내 놓거나
- 오래걸리는 작업에 들어가서(i/o, event)
- exit 되면
terminated 상태가 된다.
**프로세스 스케줄링 큐
Job queue, Ready queue, Device queues(디바이트 처리를 기다리는 프로세스들)
프로세스들은 각 큐들을 오가며 수행된다.
PCB
운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보
다음의 구성 요소를 구조체로 유지한다.
- OS가 관리상 사용하는 정보
- Process state, Process ID
- 스케쥴링 우선순위 - CPU 수행 관련 하드웨어 값(커널 메모리 안에 있는 값들)
- Program counter
- register - 메모리 관련
- code, data, stack의 위치 정보 - 파일 관련
- open 하여 사용하고 있는 파일 정보
문맥 교환
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
> 과정
1) CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
2) CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
여기서 주의해야할 것은 system call이나 interrupt 발생 시 반드시 context switch가 일어나는 것은 아니라는 점이다.
서비스 요청으로 커널의 개입이 있더라도 다시 A에게 돌아간다면 이것은 문맥교환이 아니다.
(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save를 해야하지만(cpu에서도 register를 사용해야하니까), 문맥 교환을 하는 (2)의 경우 그 부담이 훨씬 크다.
(ex. cache memory flush : A가 쓰던 memory를 비워야한다)
'System > OS' 카테고리의 다른 글
운영체제 4강] (0) | 2021.10.04 |
---|---|
운영체제 3-3~3-4] 스케줄러 (0) | 2021.09.26 |
운영체제 2-3 ~ 2-4] 시스템 구조 (0) | 2021.09.19 |
운영체제 2-1 ~ 2-2] 운영체제의 개요 (0) | 2021.09.19 |
운영체제 1-2] 운영체제의 개요 (0) | 2021.09.12 |