운영체제와 정보기술의 원리 책 요약 정리
1. 프로세스 개념
프로세스 : 실행중인 프로그램
프로세스 문맥 : 프로세스의 현재 상태 정보
크게 분류
(1) 하드웨어 문맥 : 프로그램 카운터 값, 각종 레지스터 값
(2) 프로세스의 주소 공간 : 코드, 데이터, 스택 등 독자적인 주소 공간
(3) 커널상의 문맥 : 운영체제의 프로세스 관리를 위한 자료구조들. PCB와 커널 스택 등
2. 프로세스의 상태
프로세스의 상태 크게 3가지 : 실행, 준비, 봉쇄
(1) 실행 : 프로세스가 CPU 보유. 기계어 명령 실행 중
(2) 준비 : CPU 할당 대기
(3) 봉쇄 : CPU를 할당 받더라도 명령을 실행할 수 없는 상태(ex. 시스템콜 요청 응답 대기 상태)
문맥교환 : 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정
CPU 디스패치 : 프로세스가 CPU제어권을 넘겨받는 과정
프로세스A가 시스템콜을 한 경우 운영체제는 프로세스 A를 봉쇄 상태로 변경한다.
그동안 준비상태의 프로세스 중 하나였던 프로세스 B가 CPU 제어권한을 받는다.
시스템콜 값이 반환되면 프로세스 A는 다시 준비 상태가 되고 CPU 권한 대기 큐에 들어간다.
3. 프로세스 제어블록 : PCB(Process Control Block)
PCB의 요소
* 프로세스의 상태 : CPU 할당 가능 여부
* 프로그램 카운터 값 : 다음에 수행할 명령
* CPU 레지스터 값 : CPU 연산을 위한 현 시점 레지스터 저장값
* CPU 스케줄링 정보
* 메모리 관련 정보
* 자원 사용 정보
* 입출력 상태 정보
4. 문맥 교환
문맥 교환 : 프로세스에서 다른 프로세스로 CPU 제어권이 이양 되는 과정
예를 들어 타이머 인터럽트 발생으로 프로세스 A -> 프로세스 B 로 CPU 제어권이 이양 될 때
1) 프로세스 A의 문맥 저장. 준비 상태로 변경
2) CPU를 프로세스 B에 할당
3) 프로세스 B의 문맥 복원. 실행 상태로 변경
예외 : 사용자 모드(프로세스 A) -> 커널 모드(시스템콜) -> 사용자 모드(프로세스 A) 는 문맥 교환X
문맥 교환은 비용이 크다.
CPU 할당 시간을 적게 세팅하면 문맥교환의 비용이 크다.
CPU 할당 시간을 길게 세팅하면 시분할 시스템의 의미가 퇴색된다.
적절한 CPU 할당시간을 정하는 것이 중요하다.
5. 프로세스를 스케줄링하기위한 큐
준비 큐 : 운영체제가 CPU 할당을 위해 준비 상태의 프로세스들을 줄세우기 위한 큐
장치 큐 : 특정 장치 자원 사용을 기다리는 프로세스들을 줄세우기 위한 큐(ex. 디스크 입출력 큐). 봉쇄 상태 프로세스들
소프트 웨어 자원 큐 : 공유데이터 같은 소프트웨어 자원 사용을 기다리는 프로세스들을 줄세우기 위한 큐
(공유데이터 동시 접근 시 데이터 일관성이 깨질 수 있다)
작업큐 : 모든 프로세스를 관리하는 큐. 가장 넓은 개념. 준비 큐와 장치 큐에 있는 프로세스들이 모두 속해있다.
6. 스케줄러
스케줄러 : 어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 코드
장기 스케줄러(작업 스케줄러) : 어떤 프로세스를 준비 큐에 진입시킬지 결정. 메모리 할당에도 관여
단기 스케줄러 : 준비 상태 프로세스 중 어떤 프로세스를 다음에 실행 시킬지 결정
> 타이머 인터럽트 발생 시 단기 스케줄러가 관여
현대에는 자원(메모리 등)이 충분하여 일반적으로 장기 스케줄러를 사용하지 않는다.
대신 중기 스케줄러를 사용한다.
중기 스케줄러 : 너무 많은 프로세스에게 메모리를 할당해 성능이 저하되는 경우, 프로세스 수를 조절
메모리를 통째로 빼앗아 디스크 영역으로 내린다(스왑 아웃). 0순위 프로세스는 봉쇄 상태 프로세스들이다.
그래도 부족하다면 그 다음은 타이머 인터럽트가 발생한 프로세스들이다. 다시 할당 받기위해 순서가 돌아오기까지 오랜시간 걸리기 때문이다.
중기 프로세스로 프로세스 상태가 하나 더 추가된다.
중지 상태 : 프로세스의 수행이 정지된 상태
중지 준비 : 준비 상태에 있던 프로세스가 스왑 아웃
중지 봉쇄 : 봉쇄 상태에 있떤 프로세스가 스왓 아웃
7. 프로세스의 생성
프로세스의 생성 : 부모 프로세스가 자식 프로세스를 만든다. 최초의 프로세스는 운영체제가 직접 생성한다.
소멸 과정 : 부모 프로세스가 종료되기 위해서 자식 프로세스가 먼저 종료되어야 한다.
프로세스 자원
(1) 운영체제로부터 직접 할당
(2) 부모 프로세스의 자원 공유
수행 모델
(1) 부모와 자식이 공존하며 수행 (자원 경쟁 관계)
(2) 자식이 종료될 때가지 부모가 수행하지 않고 기다림(부모는 봉쇄 상태)
ex) 명령어 입력창에 커맨드 입력 시 컨맨드의 수행이 종료될 때까지 기다린다.
프로세스 주소 공간
(1) 자식 프로세스는 별도의 주소 공간을 가진다. 부모 프로세스의 주소 공간 내용을 그대로 복사한다.
(2) 자식 프로그램이 다른 프로그램 수행 시 생성된 주소 공간 위에 새로운 프로그램 주소공간을 덮어씌운다.
종료 방법
(1) 자발적 종료 : 프로세스가 마지막 명령을 수행한 후 운영체제에 요청
(2) 비자발적 종료 : 부모프로세스가 자식프로세스 강제 종료.
- 자원 요구 한계치 초과
- 수행 도중 자식 프로세스가 필요 없어진 경우
- 부모 프로세스가 종료되는 경우
> 부모 프로세스가 종료되어도 실행되어야 하는 경우. 시스템 프로세스의 자식으로 이양 시킨다.
자식프로세스 생성 과정
(1) fork() 시스템콜 : 프로세스 복제 생성. 주소공간, 프로그램 카운터, 레지스터 상태, PCB 및 커널스택 등 복사
유일한 차이는 프로세스 식별자와 fork()반환 값이다. 부모는 양수 자식은 0. 반환 값으로 분기
(2) exec() 시스템콜 : 프로세스가 지금까지 수행했던 상태를 잊고, 완전히 새로운 프로그램으로 주소공간을 덮어씌움
즉 새로운 프로그램을 수행시키려면 fork() 후 생성된 프로세스에 exec()를 하면 된다.
* 번외 wait() 시스템 콜은 fork() 후 자식 프로세스가 종료될 때까지 부모 프로세스가 기다리도록 한다. 동기화.
fork(), exec(), wait() 모두 특권 명령에 해당한다.
8. 프로세스 간의 협력
때때로 정보 공유 및 속도 향상 등 프로세스들이 협력할 필요가 있다.
IPC(Inter-Process Communication)
> 프로세스가 동시에 데이터를 사용하면 데이터 불일치 문제가 발생한다.
즉 IPC는 프로세스들 간의 통신과 동기화를 이룩 ㅣ위한 메커니즘이다.
IPC 대표적인 방법 두가지
(1) 메세지 전달
(2) 공유 메모리
메세지 전달
커널에 의해 send와 receive 연산을 제공받는다. 프로세스끼리 직접 주고 받는다면 다른 프로세스에게 악영향을 끼칠 수도 있기 때문에 특권 명령으로 규정해 커널을 통해서만 가능한다.
통신하기 원하는 두 프로세스는 커뮤니케이션 링크를 생성한 후 send() 와 receive()를 이용해 메세지를 주고받는다.
메세지 전달 방식
(1) 직접 통신 : 프로세스간 통신. send(P, message) P 프로세스에게 송신. receive(Q. message) Q 프로세스로부터 수신
(2) 간접 통신 : 메일박스 또는 포트를 통해 통신. send(A, message) A 메일박스에 송신. reveive(A, message) A 메일박스 로부터 수신.
간접 통신에서 데이터 일관성을 해결하는 다른 방법들
* 간접 통신에서 P1, P2, P3가 메일박스 A를 공유하는 경우 P1이 메시지를 보내면 P2와 P3 중 어느 프로세스 메시지를 받을까?
(1) P2와 P3에게 각각 따로 링크가 생성된다.
(2) receive() 연산을 매 시점 하나의 프로세스만 수행할 수 있도록 한다.
(3) 시스템이 수신자를 임의로 결정하고, 송신자에게 알려준다.
IPC 공유 메모리 방식
프로세스들의 주소 공간 일부를 공유한다. 일관성 문제는 커널이 책임지지 않는다. 프로세스들이 직접 동기화 문제를 책임져야 한다.
'Infra > 운영체제' 카테고리의 다른 글
4. 프로그램의 구조와 실행 (0) | 2021.10.18 |
---|---|
3. 컴퓨터 시스템 (0) | 2021.10.15 |
2. 운영체제의 개요 (0) | 2021.10.15 |
1. 컴퓨터 및 정보기술의 역사 (0) | 2021.10.15 |
댓글