티스토리 뷰
KOCW 이화여대 반효경 교수님의 2014년 운영체제 강의를 듣고 정리한 내용입니다.
프로세스 개념
- 실행 중인 프로그램
프로세스의 문맥
- CPU 수행 상태를 나타내는 하드웨어 문맥 (CPU 관련)
- Program Counter : 코드의 어느 부분까지 실행했는가
- 각종 register : register가 어떤 값을 가지고 있는지
- 프로세스의 주소공간 (메모리 관련)
- Code / Data / Stack : 각각에 어느 내용이 들어있는가
- 프로세스 관련 커널 자료 구조 (운영체제 관련)
- PCB (Process Control Block)
- 커널 주소공간의 Data영역에 존재
- Kernel stack (프로세스 별로 커널스택 별도로 둠. 어느 프로세스의 부탁을 받고 실행하는지 매번 다르기 때문)
- 커널 주소공간의 Stack영역에 존재
- 커널에서 함수 호출이 이루어지면 커널 스택에 관련된 정보 저장
- PCB (Process Control Block)
PCB (Process Control Block)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
1) OS가 관리상 사용하는 정보
- Process state, Process ID
- Scheduling information, priority
2) CPU 수행 관련 하드웨어 값
- Program counter, registers
3) 메모리 관련
- Code, Data, Stack이 메모리 어디에 위치해 있는가
4) 파일 관련
- 오픈하고 있는 파일같은 리소스 관련...
문맥 교환 (Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴, 하드웨어에 복사시킴, 그 다음에 CPU 넘겨줌
- System Call 이나 Interrupt 발생시 반드시 문맥 교환 일어나는 것 아님!!!!!!
- System Call, Interrupt → 사용자 프로세스로부터 CPU가 운영체제로 넘어감
- System call : 프로세스가 운영체제에게 (필요에 의해) 요청
- Interrupt : Controller 같은 장치가 CPU 한테 정보 전달 목적으로 interrupt를 검
- 문맥 교환은 사용자 프로세스에서 다른 사용자 프로세스로 넘어갈 때의 과정임!!!!!!
- System Call, Interrupt → 이 때도 CPU 수행 정보 등 context의 일부를 PCB에 저장함
- But, 진짜 문맥교환 시에는 그 부담이 더 큼 (문맥 교환시 프로세스가 사용하던 cache memory 다 지워야함 == cache memory flush)
프로세스의 상태
- 프로세스는 상태가 변경되며 수행됨
- Running
- CPU를 잡고 instruction 수행 중인 상태
- Ready
- 메모리 등 다른 조건을 모두 만족하고 CPU만 얻으면 실행 가능한 상태
- (실행에 필요한 부분이 메모리에 올라와 있을 때)
- CPU를 기다리는 상태
- Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(ex. I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- ex. 디스크에서 file을 읽어와서야 다음 instruction을 수행할 수 있을 때
- Suspended(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out된다
- ex1. 사용자가 프로그램을 일시정지 시킨 경우 (break key) (메모리에 너무 많은 프로세스가 올라와 있을 때) Suspended : 외부에서 resume 해주어야 Active
- cf. Blocked : 자신이 요청한 event가 만족되면 Ready
- ex2. 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (중기 스켸줄러가)
- New
- 프로세스가 생성 중인 상태
- Terminated
- 수행(execution)이 끝난 상태 (종료 중인 상태)
중기 스켸줄러 배우기 전 프로세스 상태도
중기 스켸줄러 배우고 난 후
- Running (monitor mode) : 사용자 process가 kernel mode에서 실행하고 있다. (운영체제가 running하고 있다 X )
- Suspended Blocked → Suspended Ready : 메모리를 잃은 상태, CPU 관점에서 아무 일을 할 수 없음
- I/O는 진행중이였다면 계속 진행가능 (= Suspended ready로 넘어갈 수 있다.)
cf. Ready queue, Disk I/O queue, Keyboard I/O queue, Resource queue..
→ 운영체제 커널의 Data 영역에 자료구조로 큐를 만들어놓고 프로세스 상태를 바꿔가며 실행하는 것
→ 큐에 PCB가 줄 서 있는 것임
프로세스를 스켸줄링하기 위한 큐
- Job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device queues
- I/O device의 처리를 기다리는 프로세스의 집합
프로세스들은 각 큐들을 오가며 수행된다!!
스켸줄러 (Scheduler)
- Long-term scheduler (장기 스켸줄러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 어떤 프로세스에게 memory(및 각종 자원)을 줄지 결정
- degree of Multiprogramming (메모리에 올라가있는 프로그램 수) 조정
- 1 → 하나의 프로세스가 I/O 하러 가면 CPU는 놈
- 너무 많으면 → CPU를 잡고 프로그램 실행하려고 해도 각 프로그램들이 메모리를 조금씩만 가져서 당장 필요한 부분마저도 메모리에 안올라와 있음
- Time sharing system에는 보통 장기 스켸줄러가 없음 (무조건 ready)
- Medium-Term Scheduler (중기 스켸쭐러 or swapper)
- 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 메모리에 너무 많은 프로그램이 동시에 올라가있으면 swapper가 일부 프로그램 골라서 메모리에서 통째로 쫓아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어
- 우리가 사용하는 시스템은 중기 스켸줄러로 degree of Multiprogramming 제어
- 프로세스를 통째로 메모리에서 디스크로 쫓아냄
'CS공부 > 운영체제' 카테고리의 다른 글
[KOCW 반효경 교수님 운영체제 강의] 프로세스 관리 2 (0) | 2021.04.15 |
---|---|
[KOCW 반효경 교수님 운영체제 강의] 프로세스 관리 1 (프로세스 생성/종료) (0) | 2021.04.15 |
[KOCW 반효경 교수님 운영체제 강의] 프로세스 3 (Thread) (0) | 2021.04.12 |
[KOCW 반효경 교수님 운영체제 강의] 프로세스 2 (동기식/비동기식 입출력) (0) | 2021.04.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크