본문 바로가기
정리/OS

Part 2 - Chapter 3

by 2744m 2018. 11. 11.

Chapter 3. 프로세스


프로그램 vs 프로세스

- 프로그램 : 어떤 작업을 위해 수행 될 수 있는 것, 보조 기억장치에 존재

- 프로세스 : 주 기억장치에 적재되어 , 처리기를 살당 받아 수행상태가 된 것, 수행 중인 프로그램 인스턴스

즉, 프로그램은 정적인 개념으로 컴퓨터에 저장된 실행 가능한 파일(?)이고, 프로세스는 동적인 개념으로 실행 되고있는 파일(?)이다.

ex) 메모장이란 프로그램 4개를 실행시킨다고 가정을 하면, 프로세스 상에는 4개의 프로그램을 실행 중인 상태이다.


프로세서의 구성요소

1. 프로그램 코드 : 동일 프로그램을 수행 하는 서로 다른 프로세서들이 공유할 수 있는 부분

2. 데이터의 집합 : 수행 중인 코드와 연관된 데이터들

3. 프로세스 제어 블록 (PCB) : 프로세스 식별 요소들을 저장하는 자료구조


프로세스 식별 요소 ( OS가 프로세스를 관리하기 위해 필요로 하는 정보들)

- 식별자(PID) : 각 프로세스를 다른 모든 프로세스들로 부터 구별하는 유일한 식별자

- 상태 : 프로세스의 현재 상태 ex) Running

- 우선 순위 : 프로세스 간의 상대적 우선순위 수준

- 프로그램 카운터(PC) : 프로그램의 다음 수행될 명령어의 주소가 저장 (** PC가 가르키는 프로세스가 현재 실행 중인 프로세스**)

- 메모리 포인터 : 프로세스와 연계된 프로그램 코드 및 데이터, 다른 프로세스들과 함께 공유되는 메모리 블록들에 대한 포인터 포함

- 문맥 데이터 : 프로세스가 수행 중일 때, 처리기의 레지스터에 존재하는 데이터

- 입출력 상태정보

- 어카운팅 정보


프로세스 제어블록(PCB)

- OS에 의해 생성, 관리

- OS는 모든 프로세스의 상태와 위치 정보를 위해 PCB를 사용한다.

- 주요 역할

1. 인터럽트 발생을 허용 

   (수행 프로세스를 인터럽트한 후 나중에 다시 프로세스를 수행할 수 있도록 그 프로세스의 정보를 저장함)

2. 다중프로그래밍과 멀티프로세싱 허용

- 멀티프로그래밍 : 하나의 프로세서가 여러 프로세스을 처리하는 것 (인터리빙과 연관)

- 멀티프로세싱 : 여러개의 프로세서가 여러 프로세스를 처리하는 것 (오버래핑과 연관)


디스패처(Dispatcher) : 처리기를 한 프로세스로 부터 다른 프로세스로 교체(switch)해 주는 프로그램

* 책에서 '디스패처라는 프로그램이 있다.' 라고 표현

** 프로그램 : 명령어의 집합

*** 그림을 보다가 디스패치가 있는 그림은 OS그림으로 봐도 무방?


OS의 주요 업무

- 프로세스 수행을 제어하는 것

1. 프로세스 수행을 인터리빙하는 패턴을 결정

2. 자원을 프로세스에 할당

- 프로세스 제어를 위한 OS설계의 첫 단계는, 프로세스가 보여줘야할 행위를 기술하는 것.

* 인터리빙 : 여러 응용 사이에 처리기를 교차할당하여 모든 응용이 병행 진행되는 것 처럼 보이게 하는 것 (by 교수님 PPT)


2-상태모델

- 프로세스는 수행/비수행 중 한 상태에 존재한다.

- 비수행 상태의 프로세스들을 단일 큐에 적재하여, 수행 상태의 프로세스 작업이 완료되면 큐에 있는 프로세스들을 차례로 수행 상태로 전이하여 작업을 진행한다.

- 문제점 : 비수행 상태에 있는 어떤 프로세스들은 수행할 준비가 되어있지만, 다른 프로세스들은 입출력 연산이 완료되기를 기다리면서 블록되어 있을 수도 있다. 따라서 큐에서 비수행 프로세스를 선택하는 과정에서 비효율적 상황이 발생한다.


5-상태모델

- 2-상태모델의 문제점을 처리하기 위해, 비수행 상태를 준비 상태와 블록 상태로 분할하였다.

- 입출력 연산완료 등과 같은 어떤 이벤트가 발생할 때 까지 수행할 수 없는 프로세스들은 블록 상태에 위치하고, 수행을 할 수 있는 상태의 프로세스는 준비 상태에 위치하게 된다.

- 문제점 : 일반적으로 처리기가 입출력보다 빠르기 때문에, 메모리에 있는 모든 프로세스는 입출력이 완료되기를 기다리게 됨. 

  즉, 블록 단계에 밀집하게 되어 메모리를 많이 잡아먹게되고, 크기가 큰 프로세스를 처리하지 못하는 상황이 발생함.

- 해결법

스와핑 : 주 기억장치에 있는 프로세스 중에서 준비 상태에 있는 프로세스가 하나도 없다면, 운영체제는 블록 되어있는 프로세스들 중 일부를 보조기억장치로 보내서 "보류 큐"에 넣는다. 이 때, 주 기억장치에 생긴 여유 공간을 통해 메모리를 확보하여 다른 프로세스를 준비 단계로 전이시킨다.


- 준비 상태에 적재될 때, 생성→준비 보다 보류→준비가 응답률이 좋다. 그러나 원하는 사건이 발생하지 않으면 쓸모 없음

- 보류 상태에서 전이된 프로그램의 특징은 블록 상태의 특징과 동일하다.




운영체제 제어구조

- 컴퓨터 시스템에서 발생하는 사건들을 제어한다.

- 프로세스가 사용하는 시스템 자원들을 관리하는 개체이다.

- 각 정보들에 대한 상태들을 테이블로 구성해서 유지한다.

1. 메모리 테이블 : 주 기억장치(실 메모리)와 보조 기억장치(가상메모리)를 관리하기 위해 사용

2. 입출력 테이블 : 입출력 장치와 컴퓨터 시스템의 체널들을 관리하기 위해 사용

3. 파일 테이블 : 파일의 존재 여부와 보조기억장치에 저장된 파일의 위치, 현재 상태, 그 밖의 다른 속성들에 대한 정보를 저장하기 위해 사용

4. 프로세스 테이블 : 프로세스 관리를 위해 사용

- 각 테이블들은 어떤 식으로든 연결되거나 상호참조가 되어야 한다.

- 이러한 테이블들은 OS에 의해 접근될 수 있어야 하므로, 메모리 관리에 종속적

  즉, 메모리 관리 기법에 따라 달라짐 (1.연속적 메모리 할당  2.비연속적 메모리 할당)


프로세스 제어 구조

- OS가 임의의 프로세스를 관리하고 제어하기 위해 알아야 할 사항들

1. 프로세스 위치 : 프로세스 테이블에 의해 관리

- 프로세스 제어블록 : 프로세스에서 사용되는 속성들의 집합

- 프로세스 이미지 : 프로그램 + 데이터 + 스택 + PCB

2. 프로세스 속성 : 프로세스 제어블록의 정보들

1) 프로세스 식별 : 식별자

2) 프로세스 상태 정보 (처리기 상태정보)

- 사용자 가용 레지스터 : 기계언어로 접근

- 제어 레지스터 및 상태 레지스터 : 사용자가 사용이 불가능한 레지스터 ,기계어로도 접근이 불가능 ex) PC, 조건 코드, 상태 정보

- 스택 포인터

3) 프로세스 제어 정보

- 스케줄링과 상태정보

- 자료 구조화

- 프로세스 간 통신 (PIC)

- 프로세스 권한

- 메모리 관리

- 자원의 소유권과 이용률


프로세스 제어

- OS는 사용자 프로그램의 간섭으로 부터 자원들을 보호해야한다.


기계 명령어(ISA)

1. 사용자 ISA : 응용프로그램과 유틸리티로 접근이 가능한 명령어들로 구성

2. 시스템 ISA : 제어 레지스터 및 주요 OS 테이블(자원들)에 접근하는 명령어들로 구성

- 응용프로그램들이 직접적으로 자원에 접근하지 못하도록 한다.

- OS는 사용자 ISA와 시스템 ISA에 모두 접근이 가능

수행모드

1. 사용자 모드 (권한이 작음)     2. 시스템 모드 (권한이 큼) = 제어 모드 = 커널 모드

- 권한의 크기에 따라 처리기의 수행모드가 바뀜

- 2가지 모드를 통해서 사용자 프로그램의 간섭으로 부터 OS및 PCB와 같은 주요 운영체제 테이블을 보호

문제점

1. 처리기가 지금 어느 모드에서 수행되는지 어떻게 알 수 있는가?

- 프로그램 상태워드의 한 비트를 사용해 모드를 나타냄 ( 0 : 시스템 // 1 : 사용자)

2. 모드는 어떻게 변경되는가?

1) 응용프로그램이 OS 서비스 호출 : 사용자 → 커널

2) 예외 및 인터럽트 발생 : 사용자 → 커널 (자원에 접근하지 못하도록 종료시킴)

3) 서비스 호출/인터럽트 핸들링 루틴 종료 : 커널 → 사용자

- 수행모드 전환시, 처리기 상태정보를 해당 레지스터의 PCB에 저장 및 복구 해야함.


운영체제 커널의 주요 기능

1) 프로세스 관리

- 생성과 종료

- 스케줄링과 디스패칭

- 교환

- 동기화와 프로세스간 통신 지원

- PCB 관리 

2) 메모리 관리

- 프로세스에 주소공간 할당

- 스와핑

- 페이징과 세그먼트 관리

3) 입출력 관리

- 버퍼관리

- 프로세스에 입출력 채널과 장치 할당

4) 지원기능

- 인터럽트 핸들링

- 어카운팅

- 모니터링


프로세스 생성

1. 새로운 프로세스에 유일한 프로세스 식별자를 할당

2. 프로세스 공간을 할당

3. PCB를 초기화

4. 적절한 연결을 설정

5. 다른 자료구조를 생성 또는 확장


프로세스 교환 (프로세스의 상태 변환)

- 수행 중인 프로세스를 중단시키고 새로운 프로세스를 수행시키는 OS의 행위

- 프로세스 교환은 처리기 상태정보 + 프로세스 제어 정보 모두를 교환

- 프로세스 교환을 일으키는 사건들

1. 인터럽트

2. 트랩

- 불법적인 파일 접근 시도, 수행 중에 발생한 오류 및 예외상황 등....

- 해당 프로세스가 종료될 수도 있음 (복구 불가능한 상황)

3. 슈퍼바이저 호출


프로세스 교환 VS 모드 전환

- 모드 전환은 상태변환 X

- 프로세스 교환은 처리기 상태정보 + 프로세스 제어 정보모두를 교환하지만 모드 전환은 처리기의 상태정보만 교환

ex) 모드전환 : 인터럽트가 발생한 경우를 가정

1. 처리기가 PWS와 PC를 인터럽트 된 프로세스의 PCB에 저장

2. 처리기가 인터럽트 핸들러의 주소를 PC에 저장

3. 그 외 레지스터들의 내용을 인터럽트 된 프로세스이 PCB에 저장

4. 커널모드로 전환

5. 인터럽트 처리

6. 인터럽트 된 프로세스 레지스터의 내용 복원

7. PSW와 PC 내용 복원

Q. 1과 3에서 PCB를 나눠서 저장하는 이유는?

A. 1과2는 하드웨어적으로 빠르게 처리하고 3은 소프트웨어적으로 처리하기 때문

- 모드 전환은 현재 수행 상태에 있는 프로세스의 상태를 바꾸지 않고 계속 수행된다. 이 경우 문맥을 저장, 복구시 생기는 오버헤드가 거의 없다.

- 프로세서 교환은 프로세스의 상태전이를 포함하여 많은 환경을 변화 시켜야 하므로 모드 전환에 비해 많은 작업이 요구된다.


운영체제의 수행

1. 비프로세스 커널 : 모든 프로세스의 외부에서 운영체제 커널을 수행

- 전통적이고 일반적으로 사용되는 방법

2. 사용자 프로세스 내에서 수행 : 사용자 프로세스 문맥에서 모든 OS 소프트웨어를 수행시킨다. (모드전환)

- 소형 컴퓨터를 위한 설계방법

- 프로세스 교환이 필요 없고 모드 전환만 발생

3. 프로세스 기반 운영체제 : OS를 여러 개의 분리된 프로세스들로 구성 (운영체제 모듈화)

- 커널 부분은 커널모드에서 수행

- 다중 처리기나 멀티코어 환경에서 유용


'정리 > OS' 카테고리의 다른 글

Part 2 - Chapter 4  (0) 2018.11.13
Part 1 Chapter 1, 2  (0) 2018.10.10

댓글