티스토리 뷰

운영체제

Ch03. 프로세스 관리

Howu 2023. 12. 28. 16:09

1. 프로세스

- 실행중인 프로그렘

- 디스크에 저장된 실행 파일이 메모리에 적재될 때 비로소 프로세스가 된다.

- 텍스트 세션: 실행 코드

- 데이터 세션: 전역변수

- 힙 세션: 프로그램 실행 시 동적으로 할당되는 메모리

- 스택 세션: 함수 호출 시 임시 데이터 저장

 

프로세스 상태 별 설명

New: 프로세스 생성 중

Running: 명령어들이 실행 중

Waiting: 프로세스가 어떤 사건이 일어나기를 기다림

Ready: 프로세스가 처리기에 할당 되기를 기다림

Terminated: 프로세스 실행이 종료

 

각 프로세스는 운영체제에서 프로세스 제어 블록 PCB에 의해 표현됨

프로그램 카운터: 프로세스가 다음에 실행할 명령어의 주소

CPU 레지스터

메모리 관리 정보

CPU 스케줄링 정보

 

2. 프로세스 스케줄링

Job Queue: 프로세스가 시스템에 들어오면

Ready Queue: 준비 완료 상태에서 실행을 대기하는 프로세스들은

Device Queue: 특정 입출력 장치를 대기하는 프로세스들의 리스트

 

스케줄러

- 단기: CPU 스케줄러

- 중기: 일부 운영체제가 도입, 메모리에서 프로세스들을 제거, 메모리 상의 프로세스들의 수를 완화, 스와핑

- 장기: 잡 스케줄러, 실행 빈도 낮음, 메모리 상 프로세스들의 수를 제어, 입출력 중심 + CPU 중심 적절한 혼합 중요

 

3. 컨텍스트 스위치

프로세스를 재개하려면

 

문맥(Context)

- CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보 등을 포함

 

컨텍스트 스위치가 진행될 동안의 시스템

- 그 동안 시스템은 아무런 유용한 일을 하지 못함

=> 컨텍스트 스위치 소요 시간은 순수한 오버헤드

 

4. 프로세스 연산

- 부모 프로세스: 프로세스를 생성하는 주체

- 자식 프로세스: 새로운 프로세스

- 고유의 프로세스 식별자(pid): 대부분 운영체제가 이것을 사용하여 프로세스를 구분

- 프로세스가 자식 프로세스를 생성할 때, 자식 프로세스는 운영체제에게 자원을 직접 얻을 수 있고, 부모 프로세스가 가진 자원의 부분 집합만을 사용하도록 제한한다.

- 프로세스가 새로운 프로세스를 생성할 때, 부모 프로세스는 자식 프로세스와 동시에 구동, 자식 프로세스 전부/일부가 종료될 때까지 대기한다.

 

* fork() 시스템 콜로 새로운 프로세스 생성 => 두 프로세스 중 한 프로세스가 exec() 시스템 콜을 사용, 자신의 메모리 공간을 새로운 프로그램으로 교체 => exec() 시스템 콜은 바이너리 파일을 메모리로 적재, 프로그램 실행 시작 => 자식 프로세스가 종료될 때까지 부모 프로세스는 wait()

 

* 자식 프로세스에게 보이는 pid는 0, 부모 프로세스에게 보이는 pid 값은 0보다 큰 정수값(리턴값)

* 자식 프로세스는 리소스 권한, 스케쥴링 속성을 부모 프로세스로부터 상속

* 부모는 wait() 시스템콜로 자식 프로세스가 종료되기를 대기

* 자식 프로세스 종료 후 부모는 wait()으로부터 프로세스를 재개하여 exit()으로 종료

 

* 최종 실행이 종료된 뒤 exit()을 통해 운영체제에 삭제를 요청

- 대기중인 부모 프로세스에게 상태값을 리턴

- 운영체제에 의해 모든 프로세스들의 자원들은 할당 해제

* 부모 프로세스가 자식 프로세스를 종료 시키는 경우 abort()

- 자식이 할당된 자원의 사용량을 초과하는 경우

- 자식 task가 더 이상 필요하지 않은 경우

- 부모가 종료되었고 자식은 종료되지 않았을 때 자식만 실행될 순 없음

 

* 좀비 프로세스

- 종료되었지만 부모 프로세스가 아직 wait() 콜을 하지 않은 프로세스

- 부모가 wait() 콜을 하면 좀비 프로세스의 pid와 프로세스 테이블 항목을 운영체제에게 반환

 

* 고아 프로세스

- 부모 프로세스가 wait()을 콜 하는 대신 종료하게 되면 자식은 고아프로세스가 됨

- 리눅스, 유닉스 계열은 고아 프로세스의 새로운 부모 프로세스로 init 프로세스를 지정하여 문제를 해결

 

5. 프로세스 컨트롤

sudo service httpd start

start httpd.service

ps -ef | grep httpd //모든 프로세스에 대한 정보 확인

=> pid는 중복되지 않는 랜덤으로 할당된다.

kill -l //kill 명령어 list

kill -9 17270 //프로세스를 하나 죽였더니 새로운 프로세스가 생기게 되고, root의 프로세스를 죽이니 관련 자식 프로세스들도 모두 죽었다.

 

6. 프로세스 간 통신

  • 프로세스들은 독립적 또는 협력적
  • 협력 프로세스: 데이터 공유를 포함하여 프로세스들에게 영향을 주거나 받는다.
  • 협력을 허용하는 환경을 제공하는 이유

  - 정보 공유

  - 계산 가속화

  - 모듈화

  - 편의성

  • 프로세스 간 통신(Inter-Process Communication: IPC) 기법
  • 통신하는 프로세스들이 공유 메모리 영역을 구축해야 한다.
  • 생산자 - 소비자 문제의 해결책으로 공유 메모리를 사용하고, 버퍼가 반드시 사용 가능해야 한다.
  • 무한 버퍼: 버퍼의 크기에 실질적인 한계가 없다.
  • 유한 버퍼: 버퍼 크기 고정, 버퍼가 비어있으면 소비자는 반드시 대기한다. 모든 버퍼가 채워져있으면 생산자가 대기한다.

in: 버퍼 내에서 다음으로 비어있는 위치

out: 버퍼 내에서 첫 번째 차 있는 위치

 

  • 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고, 그 동작을 동기화 할 수 있도록 허용하는 기법
  • send(message) / receive(message) 연산 제공
  • 통신 연결을 통해 프로세스 간 메시지를 송수신
  • 논리적 구현 방법: 직접/간접 통신, 동기식/비동기식 통신, 자동/명시적 버퍼링
  • 통신을 원하는 각 프로세스는 통신의 수신자 또는 송신자의 이름을 명시해야 함
  • 연결(link)이 자동적으로 생성되고, 정확히 두 프로세스 사이에서만 연관
  • 프로세스들의 각 쌍 사이에는 정확히 한 연결만 존재
  • 대칭 주소 지정: 발신자, 수신자 프로세스 모두 이름을 지정하여 통신
  • 비대칭 주소 지정: 발신자만 수신자의 프로세스 이름을 지정
  • 메일함 또는 포트로 메시지 송수신, 두 프로세스는 프로세스가 공유된 경우에만 통신 가능
  • 두 구성원이 모두 있는 경우에만 연결 설정
  • 연결은 두 개 이상의 프로세스와 연결 가능하고, 프로세스의 각 쌍 상태에서는 여러가지 서로 다른 연결이 존재
  • 공유 메일함: 프로세스 혹은 우영체제에게 소유권이 존재

 

Q. A 메일함을 공유하는 P1, P2, P3 중 P1이 A에 메시지를 보낸다면 누가 메시지를 받아야 하나?

=> 최대 2개의 프로세스가 링크를 공유하도록 구성 => 한 번에 한 프로세스만 receive 연산을 수행할 수 있도록 함 => 송신자가 수신자를 선택할 수 있도록 함

 

* Blocking 모드(동기)

- send: 송신된 메시지가 수신될 때까지 송신자를 블록(정지)

- receive: 이용 가능한 메시지가 있을 때까지 수신자를 블록(정지)

 

* Non-Blocking 모드(비동기)

- send: 메시지를 전달한 뒤 다른 작업을 처리

- receive: 유효한 메시지를 받거나 null 메시지를 수신

 

  • 통신 프로세스 간 교환되는 메시지는 임시 대기열에 존재
  • 용량 Zero(최대길이 0): 발신자는 수신자가 메시지를 받을 때까지 차단
  • 제한된 용량(유한길이 n): 연결이 가득 차면 발신자는 대기열 공간이 확보될 때까지 차단
  • 무한 용량: 발신자는 절대 차단하지 않음

분산 환경에서는 메시지 전달 방식이 좋다.

 

7. 클라이언트-서버 환경 통신

소켓(Socket)

- 커뮤니케이션을 하기 위한 통신의 극점(Endpoint)

- IP주소 및 Port 번호를 조합하여 식별

 

클라이언트-서버 아키텍처

- 서버는 특정 포트를 listen 하면서 클라이언트 요청에 대기

- 요청을 받으면 서버는 클라이언트 소켓으로부터의 연결 요청을 수락함으로써 연결을 완성

 

원격 프로시저 호출(Remote Procedure Call, RPC)

- 네트워크로 연결 된 서버 상의 프로시저(함수, 메소드 등)를 원격으로 호출할 수 있는 기능

1) RPC 생성 2) 생성한 stub과 client 프로그램 필드 3) 함수 호출 4) 함수 호출 5/6) 결과 반환

 

* 정리

프로세스의 개별 구성요소 이해

- 프로세스: 실행하고 있는 프로그램

- 메모리 상에서의 프로세스: 스택 / 힙 / 데이터 / 텍스트

- 프로세스 상태: New / Running / Waiting / Ready / Terminated

- 프로세스 제어 블록(PCB)

 

스케줄링의 목적 및 종류와 흐름 확인

- 프로세스 스케쥴링 목적(CPU 이용을 최대화)

- 대기시간 최소화

- 최대한 공평하게

- idle 최소화

- 스케쥴링 큐: Job / Ready / Device

 

컨텍스트 스위치 개념을 이해

- 컨텍스트 스위치

 - 실행중이던 작업 중간에 다른 작업의 수행이 필요할 때, 이전 프로세스 상태를 보관, 프로세스 재개 시 참조 할 수 있도록 함

 - 컨텍스트 복구작업, 다른 프로세스로 교환하는 작업

 - PCB에 실행중이던 프로세스 문맥 저장

 

운영체제에서 프로세스 생성/종료 이해

- 자식 프로세스, 부모 프로세스 => 생성, 종료시까지 wait

- fork(), exec() 시스템 콜

- exit(), abort(), 좀비 프로세스, 고아 프로세스

 

공유메모리와 메시지 전달을 통한 프로세스간 통신에 대해 이해하고 비교

- 프로세스가 협력을 허용하는 환경을 제공하는 이유

 - 정보공유, 계산 가속화, 모듈성, 편의성

- 공유메모리: 통신하는 프로세스들 공유 메모리 영역 구축, 사용

- 메시지 전달

 - 동일한 주소공간을 공유하지 않음, 프로세스들이 통신 가능

 - 그 동작을 동기화 할 수 있도록 허용하는 기법

 - 직접, 간접 통신 / 동기식, 비동기식 통신 / 자동, 명시적 버퍼링

[비교] 공유메모리 -> 속도/메시지전달 -> 구현용이성, 분산환경

 

소켓 통신과 원격 프로시져 콜을 이용한 client-server 통신을 이해

- 소켓(socket): IP, Port 번호를 조합하여 식별

- 원격 프로시저 콜(Remote Procedure Call)

 - 네트워크로 연결된 서버 상의 프로시저를 원격으로 호출할 수 있는 기능

 

* 기타 키워드: Swapping, CPU Register, PID, PGID, PPID, Cascading 종료, MSA, REST, SOAP

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함