-
[운영체제] Process강의/운영체제-반효경 2024. 2. 17. 22:50반응형
Process
- 실행 중인 프로그램
- Context (문맥) : 특정 시점에서 어디까지 수행을 했는가 → PC가 어디를, stack, data, code에 어디까지 실행했는가, Register에는 어떤 값이 저장되어 있었는가
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Register, PC
- 프로세스의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료 구조
- PCB
- Kernel stack : 여러 프로세스가 공유 → 프로세스마다 스택을 별도로 둠
- CPU 수행 상태를 나타내는 하드웨어 문맥
프로세스의 상태(state)
- Running : CPU를 잡고 instruction 수행중
- Ready : CPU를 기다리는 상태 (메모리에 올라와있어야함)
- Blocked (wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- I/O
- New : 프로세스가 생성중인 상태
- Terminated : 수행이 끝난 상태 - 프로세스의 instruction이 모두 끝남
Process Control Block (PCB)
- OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling information, priority
- CPU 수행 관련 하드웨어 값
- Program Counter, registers
- 메모리
- Code, data, stack의 위치 정보
- 파일 관련
- Open file descriptor
문맥 교환 (context switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- 넘길 때 PCB에 문맥을 저장해놓고 바꿈
- 얻는 프로세스도 PCB에서 문맥을 읽어와 실행
- System Call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아님
- 자기 코드 실행하다가 Interrupt 발생해서 kernel 모드 실행하다가 다시 자기 코드로 넘어가면 컨텍스트 스위치 안 일어남
- 이 경우에도 CPU 문맥 정도는 저장됨 → 그러나 컨텍스트 스위치에 비해서는 훨씬 오버헤드가 적음 (eg. cache memory flush)
프로세스 스케줄링하기 위한 큐
- Job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합
- device queue
- I/O 디바이스의 처리를 기다리는 프로세스의 집합
- 각 큐에 PCB들을 저장해놓음 - 포인터를 통해 연결되어있는 형태
스케줄러 (Scheduler)
- 장기 스케줄러 (job scheduler)
- 시작 프로세스 중 어떤 것을 ready queue로 보낼 지
- 프로세스에 메모리를 주는 문제
- 멀티프로그래밍 : 메모리에 여러 프로그램을 돌리는 것
- 멀티프로그래밍의 차수(degree)를 결정 - 몇개 올릴지
- 타임 셰어링 시스템에서는 이 스케줄러가 없음 - 바로 ready로
- 단기 스케줄러 (CPU 스케줄러)
- 어떤 프로세스를 다음 번에 running 시킬지
- 충분히 빨라야 함 (milllisecond)
- 중기 스케줄러 (Swapper)
- 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- degree of Multiprogramming 을 제어
- 타임 셰어링에서 멀티프로그래밍의 차수를 제어하는 방법
추가된 프로세스 상태 (중기 스케줄러가 적용될 시)
- Suspended (stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 예 ) 메모리에 너무 많은 프로세스가 올라와 있을 때 시스템이 프로세스를 잠시 중단
- 통째로 디스크에 swap out 된다.
- ready 에서 suspend
- blocked에서 suspend
- 두가지 상태가 더 있음
- blocked와의 차이
- blocked : 자신이 요청한 이벤트가 끝나면 Ready로
- suspended : 외부에서 resume해주어야 active로
동기식 입출력과 비동기식 입출력
- 동기식
- I/O 요청 시 끝날 때까지 기다려야하는것
- 구현 방법
- I/O 끝날 때까지 CPU 낭비
- I/O 완료될 때까지 해당 프로그램에서 CPU를 빼앗음
- I/O 처리를 기다리는 줄에 그 프로그램을 줄세움
- 비동기식
- I/O 요청 시 기다리지 않고 바로 다음 instruction을 실행하는것
Thread (lightweight process)
- 프로세스 내부에 실행 단위
- 프로그램 카운터, register 문맥, 스택만 여러개 - 실행 단위만 여러개 두는 것
- 공유할 수 있는건 최대한 공유 (Task)
- code, data, OS 리소스
- 장점
- 스레드 하나가 blocked인 상황에도 다른 스레드가 running 할 수 있음
- 동일 작업을 수행하는 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상
- 병렬성을 높일 수 있음
스레드의 장점
- 응답성
- 하나의 스레드가 블록되면, 다른 스레드가 continue함 → 응답성 높아짐
- 자원 공유
- process의 코드, 데이터, 리소스를 공유함
- 경제성
- creating, CPU switching 비용이 스레드가 더 쌈
- MP 아키텍처 이용성 높임
- 멀티 프로세서의 경우 각 스레드가 병렬적으로 다른 코어에서 돌 수 있음
스레드 구현
- 커널 지원 (kernel thread)
- 커널이 스레드를 알고있음
- 라이브러리 지원 (user thread)
- 운영체제가 스레드 존재를 모름
- 제약이 있을 수 있음
- 리얼 타임 스레드
반응형'강의 > 운영체제-반효경' 카테고리의 다른 글
[운영체제] Memory Management (0) 2024.02.17 [운영체제] Deadlock (1) 2024.02.17 [운영체제] Process Synchronization (0) 2024.02.17 [운영체제] CPU Scheduling (0) 2024.02.17 [운영체제] Process Management (0) 2024.02.17