3.1 프로세스란 무엇일까?
프로세스란
- 프로세스 = 잡 = 태스크 =/= 스레드!
- CPU 할당받게 되는 단위 & 자신에게 주어진 자원들의 소유자
- 수행중인 프로그램
- 수행 중 ⇒ 프로그램, 데이터, 환경 포함 (실행, 보류 모두 포함)
- 프로그램과 데이터를 기본으로 정상적인 실행을 위해 필요한 환경을 시스템에서 부여받은 능동적인 존재
+)프로세서는 하드웨어를 의미 (CPU)
프로세스 제어 블록
프로세스에 대한 모든 정보를 가진 자료구조
- 프로세스번호 (PID)
- 상태(status)
- 프로그램 우선순위
- 프로그램 카운터 (PC)
- 메모리 포인터 = 메모리의 자리, 시작 주소
- 문맥 데이터 = 인터럽트 발생시 문맥교환하기위한
- 파일들의 정보
- 계정정보
- 입출력 정보
프로세스의 상태 변화
- 보류 상태가 필요한 이유
- 보류 준비 = 메모리의 여유X, 새로 생성된 프로세스에게 반드시 메모리 주어야 한다면, 보류해야 한다.
- 보류 대기 = 전부 대기 상태의 프로세스면 CPU가 일이 없어지므로, 보류 대기하고 새로운 프로세스를 메모리에 올린다.
- 스와핑
- swap in = 다시 메모리로 돌아옴
- swap out = 메모리공간을 뺏김
- 보류대기 ⇒ 대기
- 보류 대기에 있는 프로세스가 보류 준비에 있는 프로세스보다 우선순위가 높을 때 불필요한 스와핑을 막기위해 바로 대기로 간다.
- 문맥 교환
- 모드 스위칭 = 인터럽트 처리 전후의 프로세스가 같은 경우
- 문맥교환을 위해 필요한 일의 양이 적음
- ex) 입출력 완료 인터럽트
- 프로세스 스위칭 = 인터럽트 처리 전후의 프로세스가 달라지는 경우
- 문맥교환을 위해 필요한 일의 양이 많음
- ex) 시간 종료 인터럽트, 입출력요청
- 모드 스위칭 = 인터럽트 처리 전후의 프로세스가 같은 경우
3.2 스레드란?
- 스레드 = 프로세스 내의 세분된 작은 일
- 다중 스레딩 = 하나의 프로세스를 다수의 스레드로 만들어 실행하는 것
- 동일 프로세스 내의 스레드들은 자원을 공유한다
- 동일 프로세스 내의 스레드 통신은 커널의 개입이 필요하지 않다(사용자)
- 스레드의 상태와 동기화
- 프로세스와 마찬가지로 실행, 준비, 대기와 같은 상태를 가짐
- 특정 스레드 내의 변경이 다른 스레드에 영향을 미친다
- 스레드의 종류
- 사용자 레벨 스레드
- 스레드 라이브러리(응용프로그램)이 스레드의 모든 것을 관리
- OS(커널)는 스레드의 존재를 모름, OS는 프로세스 까지만 관리
- 특정 스레드 실행중 대기 = 소속 프로세스 대기
- 특정 스레드 실행중 시간초과 = 프로세스 스위칭
- 스레드 간의 스위칭은 운영체제가 정한 스케줄링을 따를 필요가 없다 (독자적인 스케줄링)
- 단점
- 특정 스레드의 대기 = 모든 스레드의 대기
- 스레드 다중처리 불가
- 커널 레벨 스레드
- 모든 스레드의 관리를 커널이 하는 경우
- 다중처리 환경일 때, 한 프로세스 내의 다수 스레드는 각각 처리기를 할당받아 병렬 실행
- 한 스레드의 대기 같은 프로세스내의 다른 스레드 스위칭이 가능
- 같은 프로세스 스레드 스위칭에도 커널이 개입(모드스위칭 요구)
- 사용자 레벨 스레드
'CS > 운영체제' 카테고리의 다른 글
Chapter 7: 메모리 관리 (0) | 2022.05.09 |
---|---|
Chapter 6: 교착 상태(Dead Lock) (0) | 2022.05.05 |
Chapter 5: 병행 프로세스와 동기화 (0) | 2022.05.03 |
Chapter 4: CPU 스케줄링 (0) | 2022.04.04 |
Chapter 1,2: OS와 인터럽트 (0) | 2022.03.28 |