[운영체제] 3. Process
- 프로세스의 개념
- Process is a program in execution
- 프로세스의 문맥(context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
- 프로세스의 주소 공간
- code, data, stack에 뭐가 들어있는지
- 프로세스 관련 커널 자료 구조
- PCB (Process Control Block)
- Kernel stack
- CPU 수행 상태를 나타내는 하드웨어 문맥
- 프로세스의 상태
- Running
- CPU를 잡고 명령을 수행중인 상태
- Ready
- 기다리는 상태(메모리 등 다른 조건을 모두 만족)
- Blocked(wait, sleep)
- CPU를 줘도 당장 명령을 수행할 수 없는 상태
- 프로세스 자신이 요청한 이벤트가 즉시 만족되지 않아 이를 기다리는 상태(예 : 디스크에서 파일 읽어와야 할 때)
- Suspended (stopped)
- 외부적인 이유로 수행이 정지된 상태
- 프로세스는 통째로 디스크에 swap out 된다
- 예 ) 사용자가 프로그램을 일시 정지 시킨 경우, 시스템이 여러이유로 프로세스를 중단시킨 경우(메모리가 모자라…)
- cf)
- Blocked : 자신이 요청한 이벤트가 만족되면 ready
- Suspended : 외부에서 resume해줘야 active
- New : 프로세스가 생성중인 상태
- Terminated : 수행이 끝난 상태
- Running
- PCB
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- OS가 관리상 사용하는 정보
- 프로세스 상태, 프로세스 아이디
- 스케쥴링 정보, 우선순위
- CPU 수행 관련 하드웨어 값
- PC, register
- 메모리 관련
- code, data stack의 위치 정보
- 파일 관련
- Open file desciriptor
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 문맥 교환
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는..
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 얻게되는 프로세스의 상태를 PCB에서 읽어옴
- 주의할 것 : 문맥교환은 CPU가 수행하는 프로세스가 교체되는거지, 사용자 모드<->커널모드를 얘기하는게 아님
- 프로세스를 스케줄링하기 위한 큐
- Job queue
- 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스
- Device queues
- 프로세스들은 각 큐들을 오가며 수행된다
- Job queue
- 스케줄러
- 장기 스케줄러 (job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정(new -> ready)
- 프로세스에 메모리를 주는 문제
- degree of Multiprogramming을 제어(메모리에 올라간 프로그램의 정도를 컨트롤)
- 시분할 시스템에서는 보통 없음(무조건 ready) - 중기스케줄러로 조정
- 단기 스케줄러 (CPU scheduler)
- 어떤 프로세스를 다음번에 running시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야함(ms 단위)
- 중기 스케줄러 (Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에게서 메모리를 뺏는 문제
- degree of Multiprogramming을 제어
- 장기 스케줄러 (job scheduler)
- 스레드
- CPU의 수행 단위
* 같은 일을 하는 프로세스라면 중복으로 주소공간을 낭비하지 말고 pc만 여러개 있으면 됨
* 스레드의 구성 : PC, 레지스터 셋, 스택공간
* 스레드가 동료 스레드와 공유하는 부분 = task
* code, data section, OS resources
* 전통적인 개념의 heavyweight process는 하나의 스레드를 가지고 있는 task로 볼 수 있다
* 다중 스레드로 구성된 테스크 구조에서는 하나가 블럭 당해도 다른 스레드가 running 되어 빠른 처리 가능
* 다중 스레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다
* 병렬성을 높인다 - CPU가 여러개인 경우
- 스레드의 장점
- 응답성 - 사용자 입장에서 빠르게 느낌
- 리소스 공유 - 각종 자원을 스레드 간 공유
- 경제성 - 프로세스 문맥교환 오버헤드 »» 스레드 문맥교환 오버헤드
- CPU가 여러개 있는 경우 - 멀티프로세스 아키텍쳐 이용가능
- 스레드 구현
- 커널 스레드
- 커널이 스레드를 인식하고 있음
- 커널이 직접 스레드를 관리
- 유저 스레드 (라이브러리에 의해)
- 유저 프로그램 스스로 스레드를 관리(커널은 몰라요)
- 커널 스레드
본 포스팅은 이화여대 반효경 교수님의 운영체제 강의를 기반으로 만들어졌습니다.
문제시 삭제하도록 하겠습니다.
Comments