Process Concept
프로세스는 실행 중인 프로그램을 의미하고, 프로세스 실행은 순차적인 방식으로 진행돼야한다.
프로그램 코드(텍스트 영역) : 실행 코드를 포함한다.
현재 활동(PC, 프로세서 레지스터 ..) : 프로세스의 현재 실행 상태를 나타냄
스택 : 일시적인 데이터를 저장함. 함수, 매개변수, 반환주소, 지역 변수 등
데이터 섹션 : 전역 변수를 포함한다.
힙 : 실행 시간에 동적으로 할당되는 메모리를 포함한다.
프로그램은 수동적인 개체, 프로세스는 활성적인 개체.
하나의 프로그램은 여러 개의 프로세스가 될 수 있음.
Process State
New: 프로세스가 생성 중
Running: 명령이 실행 중
Waiting: 프로세스가 어떤 이벤트가 발생할 때까지 기다림
Ready: 프로세스가 프로세서에 할당되기를 기다림
Terminated: 프로세스가 실행을 완료함
Process Control Block(PCB)
프로세스 상태 : 실행 중, 대기중 등
프로그램 카운터: 다음 실행할 명령의 위치
CPU 레지스터: 모든 프로세스 중심 레지스터의 내용
CPU 스케줄링 정보: 우선순위, 스케줄링 큐 포인터
메모리 관리 정보: 프로세스에 할당된 메모리
Accounting 정보: 사용된 CPU, 시작 후 경과된 시간, 시간 제한
I/O 상태 정보: 프로세스에 할당된 I/O 장치, 열린 파일 목록
Process Scheduling
CPU 사용을 극대화하고 빠르게 프로세스를 CPU 코어로 전환
프로세스 스케줄러는 CPU 코어에서 다음 실행할 프로세스를 선택
프로세스의 스케줄링 대기열을 유지한다.
ready queue : 메인 메모리에 있는 모든 프로세스가 포함, 실행 준비가 완료되어 대기 중인 프로세스의 집합
wait queue : 이벤트(I/O)를 기다리는 프로세스의 집합
프로세스는 두 큐 사이를 이동함.
Context Switch
컨텍스트 스위치: CPU가 다른 프로세스로 전환될 때, 이전 프로세스의 상태를 저장하고 새로운 프로세스의 저장된 상태를 로드
프로세스의 context는 PCB에서 표시됨.
context-switch의 시간은 오버헤드 - 전환하는동안 유용한 작업을 수행하지 않음.
OS, PCB가 복잡할 수록 문맥 전환 시간이 더 길어짐
시간은 하드웨어 지원에 따라 다름 - 일부 하드웨어는 CPU당 여러 개의 레지스터 세트를 제공해 여러 context 동시 로드 가능
컨텍스트 스위치는 소프트웨어적으로 일어난다. (함수호출)
Multitasking in Mobile Systems
일부 모바일 시스템은 하나의 프로세스만 실행할 수 있다.
화면 공간 및 사용자 인터페이스 제한으로 iOS에서는,
단일 프론트 프로세스 : 사용자 인터페이스 통제
다중 백그라운드 프로세스 : 메모리에 상주하여 실행, 디스플레이에는 표시되지 않고 일부 제한 있음
제한 사항에는 단일, 짧은 작업, 이벤트 알림 수신, 오디오 재생과 같은 특정 장기 실행 작업이 포함된다.
Android는 프론트와 백그라운드 모두를 실행하고 제한이 적다.
백그라운드 프로세스는 작업을 수행하기위해 service(대신 실행되는 별도의 응용 프로그램 구성 요소)를 사용
백그라운드 프로세스가 일시 중지되더라도 서비스는 계속 실행
서비스엔 UI가 없고 메모리 사용량이 적다.
Process Creation
부모 프로세스는 자식 프로세스를 생성하고, 자식 프로세스는 다시 다른 프로세스를 생성해서 프로세스 트리를 구성함.
일반적으로 프로세스는 프로세스 식별자(pid)를 통해 식별되고 관리된다.
자원 공유 옵션
- 부모와 자식 프로세스는 모든 자원을 공유한다.
* fork를 사용할 경우, 자식 프로세스는 부모 프로세스의 메모리 공간에 액세스 가능
- 자식은 부모의 일부 자원을 공유한다.
- 부모와 자식은 어떤 자원도 공유하지 않는다.
* exec() 시스템 호출하여 자식 프로세스의 메모리 공간을 새 프로그램으로 교체
실행 옵션
- 부모와 자식은 동시에 실행된다.
- 부모는 자식이 종료될 때까지 대기한다.
주소 공간
- 자식 프로세스는 부모와 동일한 복제된 주소 공간을 가진다.
- 자식은 로드된 프로그램을 가지고 있다.
UNIX 예제
fork() 시스템 호출은 새로운 프로세스를 생성
fork() 이후에 exec() 시스템 호출이 사용되어 프로세스의 메모리 공간을 새 프로그램으로 교체한다.
부모 프로세스는 자식이 종료될 때까지 wait()를 호출한다.
Process Termination
프로세스는 마지막 명령어를 실행하면 exit() 시스템 호출을 통해 OS에 삭제를 요청한다.
자식 프로세스는 부모에게 상태 데이터를 반환한다. 프로세스의 자원은 운영체제에 의해 할당 해제된다.
부모는 abort() 시스템 호출로 자식 프로세스를 죽일 수 있다. 자식을 종료하는 이유는 다음과 같다.
-> 자식이 메모리를 너무 많이 쓰는 경우
-> 자식에게 할당된 작업이 더 이상 필요하지 않은 경우
-> 부모가 종료되고나서, 운영체제가 부모가 종료되면 자식이 계속 실행되는 것을 허용하지 않는 경우
일부 운영체제에서는 부모 프로세스가 종료되면 해당 자식 프로세스가 존재할 수 없다.
프로세스가 종료되면 해당 모든 자식 프로세스도 종료돼야 한다.
- 카스케이딩 종료. 모든 자식, 손자 등이 종료된다.
- 종료는 운영체제에 의해 이뤄진다.
부모 프로세스는 wait() 시스템 호출로 자식 프로세스의 종료를 기다릴 수 있다.
호출은 종료된 프로세스의 상태 정보와 pid를 반환한다. ex) pid = wait(&status);
부모가 기다리지 않은 경우 프로세스는 좀비(zombie)가 되고,
부모가 wait()를 호출하지 않고 종료된 경우 프로세스는 고아(orphan)이 된다. 이 경우엔 운영체제가 메모리를 회수해간다.
모바일 운영체제의 경우, 메모리와 같은 시스템 자원을 회수하기 위해 프로세스를 종료해야 한다.
가장 중요하지 않은 프로세스로부터 종료하기 시작한다.
empty process -> background process -> service process -> visible process -> foreground process
Multiprocess Architecture – Chrome Browser
많은 웹브라우저는 단일 프로세스로 실행된다. 한 웹사이트가 문제를 일으키면 전체 브라우저가 멈추거나 충돌할 수 있다.
google chrome은 3가지 다른 유형의 프로세스를 가진 멀티 프로세스로 구현돼있다.
브라우저 프로세스 : 사용자 인터페이스, 디스크, 네트워크 I/O를 관리
렌더러 프로세스 : 웹페이지 렌더링, HTML, JS를 처리함. 열린 각 웹사이트마다 새로운 렌더러 생성
* 보안 취약점의 영향을 최소화하기 위해 디스크 및 네트워크 I/O를 제한하는 샌드박스에서 실행됨.
플러그인 프로세스 : 각 플러그인 유형에 대해 플러그인 프로세스가 있다.
Interprocess Communication(IPC)
협력적인(cooperating) 프로세스는 다른 프로세스에게 영향을 미치거나 받고, 데이터 공유를 할 수 있다.
협력적인 프로세스는 정보 공유, 계산 속도 향상, 모듈성, 편의성을 제공한다.
협력적인 프로세스는 공유 메모리 / 메시지 패싱 방식으로 데이터를 공유할 수 있다.
공유 메모리는 하나의 메모리에 둘 이상의 프로세스가 접근하여 데이터를 송수신한다.
이 통신은 운영체제가 아닌 사용자 프로세스의 제어 하에 이뤄진다.
공유 메모리에 액세스 할 때 사용자 프로세스가 동기화 될 수 있는 메커니즘을 제공해야한다.
배열을 이용한 원형 버퍼로 구현할 수 있다.
메시지 패싱 방식은 송신하는 쪽이 message queue에 보낼 메시지를 넣고 수신하는 쪽이 꺼낸다.
공유 변수를 사용하지 않고 프로세스 간 통신 및 동기화를 위한 메커니즘이다.
IPC는 send와 receive 두 가지 작업을 제공하고, 메시지 크기는 고정일 수도, 가변일 수도 있다.
프로세스 두 개가 통신하려면 다음을 수행한다. 서로 사이에 통신 링크 설정 - send/receive를 통해 메시지 교환
통신링크의 구현 방법은 물리적(공유메모리, 하드웨어버스, 네트워크) 방법과 논리적(직접/간접적, 동기식/비동기식, 자동버퍼링/명시적버퍼링) 이 있다.
Producer-Consumer Problem
협력 프로세스를 위한 패러다임으로, 생산자 프로세스가 생성한 정보를 소비자 프로세스가 사용하는 방식이다.
unbounded-buffer은 버퍼 크기에 대한 실용적인 제한이 없다.
bounded-buffer는 고정 버퍼 크기가 있는 것으로 가정한다.
'학교강의필기장 > 운영체제론' 카테고리의 다른 글
운영체제론[7]: 스레드 (0) | 2023.04.24 |
---|---|
운영체제론[6]: 프로세스 간 통신, RPC (0) | 2023.04.24 |
운영체제론[4]: 시스템 서비스, 운영체제 구조 - 커널, 시스템 부트 및 디버깅 (0) | 2023.04.24 |
운영체제론[3]: OS 서비스 기능, 시스템콜 (0) | 2023.04.24 |
운영체제론[2]: 운영체제론 개요 2 (0) | 2023.04.24 |