Process is a program in execution
프로세스의 문맥(context)?
특정 시점을 놓고 봤을 때 현재 어느 상태인지 규명하기 위해 필요한 요소들.
- CPU 수행 상태를 나타내는 하드웨어 문맥
- register가 현재 어떤 값을 가지고 있는가
- pc register가 어딜 가리키고 있는가
- 메모리 관련, 프로세스의 주소 공간
- code data stack에 어떤 내용이 들어있는가.
- 운영체제 (커널) 자료구조
- 커널이 가지고 있는 PCB (Process Control Block)
- 운영체제가 프로그램을 어떻게 평가하고 있느냐(?) 하는 정보
- Kernel stack - 누구의 부탁을 받고 커널 함수가 호출됐는지
- 커널이 가지고 있는 PCB (Process Control Block)
프로세스가 CPU를 잡게 되면 PC register가 프로세스의 code 어느 부분을 가리킴
프로세스의 상태(Process State)
- Running
- CPU를 잡고 instruction을 수행 중인 상태
- Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족된 상태)
- Block(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- Suspended (stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 예) 중기 스케줄러에 의해 메모리가 디스크로 내려감(뺏김 swap out)
- 사용자가 프로그램 정지 (break key)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
++ Blocked VS Suspended
자신이 요청한 event가 만족되면 Ready - blocked
외부에서 resume 해 주어야 Active - Suspended
++ New - 프로세스가 생성중인 상태
Terminated - 수행(execution)이 끝난 상태
PCB
운영체제가 각 프로세스를 관리하기 위해 프로세스당 커널 Data 영역에 유지하는 정보
구성요소
- OS가 관리상 사용하는 정보
- 프로세스 상태, 프로세스 아이디
- 스케쥴링 정보, 우선순위
- CPU 수행 관련 하드웨어 값
- 메모리 관련
- 파일 관련
문맥 교환 (Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- 레지스터, 프로그램 카운터, 메모리에 저장되어있던 값을 process의 PCB에 저장
- 사용자 프로그램(프로세스)에서 os로 넘어가는 건 문맥 교환이 아님.
- 그러나 약간의 문맥이 세이브되긴 함.
- 문맥 교환의 경우 캐시메모리도 flush 하기때문에 더 큰 오버헤드가 일어남.
- 인터럽트가 일어난 후 cpu가 다른 프로세스로 넘어가면 문맥교환
스케줄러(Scheduler)
Short-term scheduler - CPU scheduler
- 어떤 프로세스를 다음번에 running 시킬지 결정
Long-term scheduler - job scheduler 메모리 관련
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정, 어떤 프로세스에 메모리 줄지.
- 몇 개의 프로그램을 동시에 메모리에 올릴지 결정(degree of Multiprogramming 제어)
- time sharing system에서 보통 장기 스케줄러 없음(무조건 ready)
그러나 메모리에 너무 많은 프로그램이 동시에 올라가이 있으면 문제가 됨. 그래서 중기 스케줄러 존재
Medium-Term Scheduler - Swapper
- 여유공간 마련을 위해 프로세스 통째로 메모리에서 디스크로 쫓아냄.
- 프로세스에게서 memory를 뺏는 문제(degree of Multiprogramming 제어)
궁금
그런데 문맥이라는 게 그럼 결국 PCB 그 자체인 건가?
문맥을 알기 위한 요소들이 문맥 교환 때 모두 PCB에 저장되니까 PCB가 프로세스 문맥을 저장하는 수단인 건가?
뭔가 어감은 다르지만 내가 이해하는 게 어느 정도는 맞는 거 같다.
뭔가 컴퓨터 구조도 공부해보고 싶다
Thread
프로세스 내부에 CPU수행 단위가 여러 개 있는 경우 스레드라고 부름
lightweight process - 프로세스를 별도로 두는 것보다 스레드를 두는 것이 가벼움
프로세스 하나에서 공유할 수 있는 것들은 최대한 공유
- 스레드가 독립적으로 가지고 있는 것
- program counter
- register set
- stack space
- 스레드들이 공유하는 부분(=task)
- 메모리 주소
- code, data, 각종 자원(OS resources)
스레드 장점
https://jayhyun-hwang.github.io/2021/09/02/The-Difference-Between-Asynchronous-And-Multi-Threading/
쓰레드 구현 방법
커널 스레드 - 스레드가 여러 개가 있다는 것을 커널이 알고 있음. 스레드 간의 switch도 커널이 함.
유저 스레드 - 라이브러리를 통해서 지원. 유저 프로그램이 스레드 관리. 커널은 스레드가 여러 개인지 모름. 커널 입장에선 프로세스 1개.
출처 : http://www.kocw.or.kr/home/cview.do?cid=3646706b4347ef09
'study > 운영체제 OS' 카테고리의 다른 글
CPU Scheduling - 운영체제 반효경 교수님 (0) | 2022.10.28 |
---|---|
Process management - 운영체제 반효경 교수님 (0) | 2022.10.24 |
System Structure & Program Execution - 운영체제 반효경교수 (0) | 2022.10.21 |
Introduction to OS (0) | 2022.10.20 |
운영체제 개요 - 이화여대 반효경교수님 강의 (0) | 2022.10.20 |
댓글