Process
1. process
: 사용자의 요청에 의해 OS가 디스크에 있던 프로그램을 메모리에 적재하고, PCB로 관리함
즉, 실행 중인 프로그램
=> 연산(CPU명령어의 집합)
=> 전역변수들을 저장
=> 동적 메모리 할당영역
=> 지역변수 및 매개변수 저장
CPU의 레지스터들:
1. CS : 코드영역의 시작 주소를 가짐
2. DS : 데이터 영역의 시작 주소를 가짐
3. SS : 스택영역의 시작 주소를 가짐
4. PC : 다음 실행할 명령어의 주소값을 가짐
예시.
2. 프로세스 제어 블록
1) 프로세스 제어블록이란?
: 프로그램을 실행하여 프로세스가 만들어질 때, 운영체제가 프로세스를 관리하기
위해 만드는 데이터 구조
프로세스가 생성될 때마다 PCB가 생성되고 프로세스가 종료되면 PCB는 제거된다.
2) 프로세스 제어 블록의 내용 :
- 프로세스 상태(state)
- CPU 레지스터
- CPU 스케쥴 정보
- 기억장치 관리 정보
- 계정 정보
- 입출력 상태 정보
3. 다중 프로그래밍
: 다중 프로그래밍은 여러 작업들을 메모리에 유지시켜서 CPU가 항상 하나의 작업을 실행할 수 있게 하는 기법으로 CPU의 사용률을 높일 수 있다.
단일 작업은 CPU와 입출력 장치를 동시에 사용할 수 없어 작업이 입출력 때문에 대기하게 된다면 운영체제는 CPU를 유휴상태로 두지 않고 다른 프로세스를 실행하도록 한다.
4. 시분할, 멀티태스킹
: 각 프로세스에게 CPU를 시간적으로 분할해 조금씩 사용할 수 있게 하는 시스템
=> 각 사용자는 자신만이 컴퓨터를 소유한 것처럼 느끼지만 실제로는 다수의 사용자가
하나의 컴퓨터를 공유함
5. 프로세스 상태
: 프로세스는 상태가 그때 그때 변한다.
=> 생성, 실행, 대기, 준비, 종료
- 생성 : 프로세스가 생성되는 중
- 실행 : 프로세스의 명령어들이 실행되고 있다.
- 대기 : 프로세스가 어떤 사건이 일어나기를 기다림
- 준비 : 프로세스가 CPU를 할당받기를 기다린다.
- 종료 : 프로세스의 실행이 종료된다.
=> ps) 사실 더 많이 있다.
* 어느 한순간에는 한 CPU에 오직 하나의 프로세스만이 실행된다.
==> 실행상태의 프로세스는 오직 한개다! 나머지는 대기 or 준비상태이다
* state : CPU의 여러 레지스터들
* save와 reload사이에 interrupt를 처리
6. 문맥 교환(Context switch)
* 문맥 교환 : CPU가 다른 프로세서로 넘어갈 때, 현재 CPU의 레지스터들의 상태를 PCB에 저장하고, 새 프로세서의 PCB를 다시 적재하는 작업
* 문맥교환은 시스템의 오버헤드이다 : 문맥교환 동안에는 interrupt를 처리해야함으로
실제 필요한 작업을 하지 못한다.
==> 오버헤드는 작을수록 좋다.
* 문맥 교환(오버헤드)에 걸리는 시간을 줄이는 방법 :
1. PCB는 OS안에 만들어짐으로 메모리에 위치한다. 따라서 메모리의 읽고 쓰는 속도가
빠를수록 문맥교환을 빨라진다.
2. 레지스터가 많을수록 메모리로 옮길것이 많아짐으로 레지스터의 수가 적을수록 문맥
교환 속도가 빨라진다.
3. 일부 제품은 한 명령어로 CPU의 레지스터들을 메모리로 한번에 옮긴다.
==> 문맥교환은 하드웨어의 지원에 따라 달라진다.
7. 프로세스 스케줄링
: CPU 이용률을 최대화 하기위해 여러 프로세스들 중에서 어떤 것을 실행할 것인지를
결정하는 것
1) 스케줄링 큐
* 준비 큐(Ready queue)
- 실행하기 위해 주기억장치(메모리)에서 준비하고 있는 프로세스들을 관리
- 일반적으로 연결리스트 형태로 관리된다.
> 준비 큐의 헤더는 첫벗째 PCB와 마지막 PCB를 가리키는 포인터를 가지고 있다.
> PCB는 다음 PCB를 가리키는 포인터를 가지고 있다.
* 입출력 장치 큐
- 각 입출력 장치는 자신의 장치 큐를 가진다.
- 입출력 장치에서 대기하는 프로세스들을 관리
- 프로세스는 CPU를 할당받아 실행되다가 입출력 요청을 하게되면, 입출력 요청의
완료를 기다려야한다. 이때, 입출력장치에 다른 프로세스들도 기다리고 있으므로
대기하고 있는 프로세스들을 연결하여 큐로 관리한다.
예시.(준비 큐와 입출력장치 큐)
* ready state : ready queue (준비 큐)
* waiting state : device queue (장치 큐)
: 장치큐는 장치마다 하나씩 존재하며 입출력 요청을 하고 끝날때까지 기다리는
프로세스들을 큐로 연결한 것이다. 입출력이 완료되면 준비큐의 끝에 연결되어
자신의 차례를 기다린다.
===> 결론 : PCB가 이동한다!!!
예시.(프로세스(PCB)의 큐 이동)
* 새로 생성된 프로세스는 ready queue에서 대기한다.
* 대기하던 프로세스는 CPU를 할당받아 실행된다.
* 프로세스가 실행되던 도중 위와 같은 4가지 사건이 발생할 수 있다.
- I/O interrupt가 발생하여 입출력장치 큐에 위치하고 입출력이 끝나면 준비큐로 복귀
- 시분할 시스템의 경우 timer interrupt가 발생하면 준비 큐로 다시 복귀
- 자식 프로세스를 생성하여 자식이 먼저 종료되길 기다리다가 종료되면 준비큐로 복귀
- 특정 interrupt를 기다리다가 발생하면 레디큐로 돌아간다.
ex. 입출력 요청을 하고서 입력 완료 interrupt가 발생하길 기다리는 것
ps) 현재 진행 프로세스가 기다리는 것이 아니다!!
잘읽었습니다. 요약이 정말 잘되있네요!! 다음강의도 올려주세요
답글삭제