반응형
** KOCW에서 반효경 교수님의 운영체제(2014년) 강의를 수강한 내용을 정리한 글입니다.
프로세스의 개념
- “Process is a program in execution”
- 프로세스의 문맥
- 현재 프로세스를 규정하는 모든 정보
- 하드웨어 문맥
- Program Counter
- Register가 어떤 값을 가지고 있었는가
- 프로세스의 주소 공간
- Code, Data, Stack
- 프로세스 관련 커널 자료 구조
- PCB(Process Control Block)
- Kernel stack
프로세스의 상태(Process State)
→ 프로세스는 상태가 변경되며 수행된다
- Running
- CPU를 잡고 Instruction을 수행 중인 상태
- Ready
- CPU를 기다리는 상태
- 메모리 등 다른 조건은 모두 만족한 상태여야 함
- Blocked(wait, sleep)
- CPU를 주어도 당장 Instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(예: I/O)의 수행을 기다리는 상태
- 예) 디스크에서 file을 읽어와야 하는 경우 / 물리적 메모리에 주소 공간이 올라오지 않은 경우
- New : 프로세스가 생성 중인 상태
- Terminated : 수행(Execution)이 끝난 상태
Process Control Block(PCB)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스마다 가지고 있는 정보
- 구성 요소는 아래와 같다(구조체로 유지)
- OS가 사용하는 정보
- 프로세스 상태, 프로세스 ID
- 스케쥴링 정보, 우선순위
- CPU 수행 관련 하드웨어 값
- PC, Registers
- 메모리 관련
- Code, Data, Stack의 위치 정보
- 파일 관련
- 오픈하고 있는 파일들이 어떤 것인지
- OS가 사용하는 정보
문맥 교환(Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때
- CPU를 내어주는 프로세스의 상태를 해당 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
- 시스템 콜이나 인터럽트 발생 시, 반드시 문맥 교환이 일어나는 것은 아님
- (1)의 경우에서 CPU 수행 정보 등 Context 일부를 PCB에 저장해야 하지만, 문맥 교환을 하는 (2)의 경우 부담이 훨씬 크다 (eg. Cache memory flush)
스케쥴러(Scheduler)
- 숏텀 스케쥴러(CPU Scheduler)
- 어떤 프로세스에 CPU를 줄지(어떤 프로세스를 다음번에 running시킬지) 결정
- 충분히 빨라야 함(ms 단위)
- 롱텀 스케쥴러(Job Scheculer)
- 프로세스에 Memory(및 각종 자원)를 주는 문제
- 시작 프로세스 중 어떤 것들을 Ready queue로 보낼지 결정
- Degree of Multiprogrammimng을 제어(메모리에 올라가 있는 프로세스 수를 제어)
- 우리가 사용하는 Time sharing system에서는 보통 롱텀 스케쥴러가 없음 (무조건 Ready)
- 그럼 Degree of Multiprogramming을 어떻게 제어? → 미디엄텀 스케쥴러
- 미디엄텀 스케쥴러(Swapper)
- 여유 공간 마련을 위해 일부 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 Memory를 뺏는 문제
- Degree of Multiprogramming을 제어
- 그럼 Swap된 프로세스는 Ready, Running, Blocked 중 어떤 상태인가?
- → 새로운 상태 Suspended(stopped)
Suspended vs Blocked
- Suspended(stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스 통째로 디스크에 Swap out 된다
- 예시)
- 사용자가 프로그램을 일시 정지
- 시스템이 여러 이유(메모리가 가득참 등 → 미디엄텀 스케쥴러)로 프로세스를 잠시 중단
- Blocked : 자신이 요청한 event가 만족되면 Ready
- Suspended : 외부에서 resume해주어야 Active(Running, Ready, Blocked의 상태)
- 시스템 콜이 있으면 → OS가 Running이라고 표현하지 않는다
- 프로세스가 스스로의 코드를 동작하고 있으면 user mode
- 프로세스가 시스템 콜을 하면 monitor mode(커널 모드) 상태라고 한다.
Thread(쓰레드)
- Thread는 CPU 동작의 가장 기초가 되는 단위이다.
- 프로세스의 하위 개념으로, 동일한 동작을 하는 프로세스를 하나로 묶어놓은 것
- Thread의 독자적인 구성 → 실행을 위한 것들
- Program Counter
- Register Set
- Stack Space
- Thread가 동료 Thread와 공유하는 부분 (= Task)
- Code section
- Data section
- OS resources
- 전통적인 개념의 프로세스(Heavyweight process)는 하나의 Thread(Lightweight process)를 가지고 있는 Task로 볼 수 있다
Thread의 장점
- 하나의 Thread가 blocked 상태인 동안에도, 동일한 Task 내의 다른 Thread(동료 Thread)가 running되어 빠른 처리를 할 수 있다.
- eg) Multi-threaded Web : 웹 페이지 → HTML 받아오고 → HTML 안에 렌더링할 이미지를 받아오는 동안(별도의 Thread) + 텍스트라도 먼저 Display(별도의 Thread)
- 메모리 공간을 절약할 수 있다.
- Binary code, Data, Resource of the process를 공유할 수 있음
- 경제성(빠른 속도)
- 프로세스를 만드는 것보다 Thread를 추가하는 것, 프로세스 문맥 교환보다 Thread 스위칭이 훨씬 빠름
- Solaris의 경우 두 가지 Overhead가 각각 30배, 5배
- 병렬성을 높일 수 있다. (CPU가 여러 개라면 → 각 CPU에 다른 Thread를 할당!)
커널 쓰레드, 유저 쓰레드
- Kernel Threads → 커널이 쓰레드의 존재를 알고 직접 관리
- User Threads → 커널은 쓰레드의 존재를 모르고, 프로세스 본인이 내부에서 쓰레드를 생성하고 관리
- 제약이 있음
반응형
'Computer Science > 운영체제' 카테고리의 다른 글
6강) 프로세스 동기화 (Process Synchronization) (0) | 2023.01.27 |
---|---|
5강) CPU 스케줄링 (CPU Scheduling) (0) | 2023.01.26 |
4강) 프로세스 관리, 시스템 콜의 종류(Process management, types of system calls) (0) | 2023.01.25 |
2강) 컴퓨터 시스템 구조 (0) | 2023.01.23 |
1강) 운영체제란? (0) | 2023.01.21 |