Chapter 3 Processes

작성자 작성일
chulee 2022.04.08

3.0 Chapter Objectives

  • 프로세스의 개별 구성요소를 식별하고 운영체제에서 해당 구성요소가 어떻게 표현되고 스케줄 되는지 기술한다.
  • 운영체제에서 프로세스를 생성하고 종료하는 방법을 설명한다. 이러한 작업을 수행하는 적절한 시스템 콜을 사용하여 프로그램의 개발 등이 포함된다.
  • 공유 메모리 및 메시지 전달을 사용하는 프로세스 간 통신을 설명한다.
  • 파이프와 POSIX 공유 메모리를 사용하여 프로세스 간 통신을 수행하는 프로그램을 설계한다.
  • 소켓과 원격 프로시저 호출을 사용하여 클라이언트-서버 통신을 설명한다.
  • Linux 운영체제와 상호 작용하는 커널 모듈을 설계한다.

3.1 Process Concept

간단히 말해서 프로세스는 실행 중인 프로그램입니다.따라서 우리는 프로세스를 프로그램이 실행될 때 발생하는 순차적인 활동과 그 실행 순서를 유지하는 데 필요한 모든 리소스와 정보를 더한 것으로 생각해야 합니다.

3.1.1 The Process


Figure 3.1: Layout of a process in memory

  • 프로세스를 유지하는 데 필요한 정보를 프로세스 컨텍스트라고 합니다.
  • 운영체제에 따라 요소는 많이 변경됩니다.
  • 기본적인 프로세스 컨텍스트 요소:
    • program counter
    • CPU register contents
    • the parts of the memory layout of the process, such as the text, data, stack, and heap.
  • 프로그램 != 프로세스
  • 프로그램은 디스크에 저장된 실행파일, 프로세스는 프로그램이 메모리에 올라가서 실행된 상태
  • 두 개 이상의 서로 다른 프로세스가 같은 프로그램을 동시에 실행할 수 있습니다. 예를 들어, 같은 컴퓨터에 로그인한 5명의 사람들이 모두 동시에 emacs 텍스트 편집기를 사용하고 있을 수 있습니다. 이와 같은 상황에서는 5개의 프로세스가 동일한 프로그램을 동시에 실행하게 됩니다. 컴퓨터의 주 메모리에는 프로그램(텍스트)의 복사본이 하나만 있을 것입니다. 그러나 각 프로세스에는 고유한 데이터, 프로그램 카운터, CPU 레지스터 내용 등이 있습니다.

3.1.2 The Process

Figure 3.2: Diagram of process state

프로세스 상태 모델은 여러개가 있다. 이 책에서는 Five-State Process Model에 대해서 설명한다.

  • 새로운 (new) : 프로세스가 생성 중이다.
  • 실행 (running) : 명령어들이 실행되고 있다.
  • 대기 (waiting) : 프로세스가 어던 이벤트(입출력 완료 또는 신호)가 일어나길 기다린다.
  • 준비 (ready) : 프로세스가 처리기에 할당되기를 기다린다.
  • 종료 (terminated) : 프로세스의 실행이 종료되었다.

3.1.3 Process Control Block


Figure 3.3: Process control block (PCB)

PCB 요소

  • 프로세스 상태
  • 프로세스 번호
  • 프로그램 카운터
  • 레지스터
  • 메모리 제한
  • CPU-스케줄링 정보
  • 오픈 파일 리스트
  • 회계 정보 (자원 이용률)

3.1.4 Threads

한 프로세스에 다수의 실행 스레드를 가질 수 있음.
스레드를 지원하는 시스템에서의 PCB는 각 스레드에 관한 정보를 포함하도록 확장함.

3.2 Process Scheduling

다중 프로그래밍 정도 : 현재 메모리에 있는 프로세스의 수
I/O 바운드 프로세스 : I/O에 많은 시간을 소비하는 프로세스
CPU 바운드 프로세스 : CPU 계산에 많은 시간을 소비하는 프로세스

3.2.1 Scheduling Queues

Figure 3.4: The ready queue and wait queues

OS는 디스패치(실행을 위해 선택됨)되기를 기다리는 준비 대기열을 유지 관리합니다.

Figure 3.5: Queueing-diagram representation of process scheduling

OS는 또한 프로세스가 I/O 완료, 인터럽트 또는 자식 프로세스의 종료와 같은 이벤트를 기다리는 다른 대기열인 대기 대기열을 유지 관리합니다.

3.2.2 CPU Scheduling

CPU 스케줄러의 역할

  • 준비 큐에 있는 프로세스 중에서 선택된 하나의 프로세스에 CPU 코어를 할당
  • CPU를 할당하기 위한 새 프로세스를 자주 선택해야 함
  • I/O 바운드 프로세스는 I/O 작업전 몇 밀리초 동안만 실행될 수 도 있음
  • CPU 바운드 프로세스의 경우 일정 시간이 지나면 다른 프로세스로 스케줄링하도록 설계

3.2.3 Context Switch

Figure 3.6: Diagram showing context switch from process to process

CPU의 현재 상태를 저정하고(state save), 나중에 연산을 재개하기 위해 복구 작업을 수행(state restore)

3.3 Operations on Processes

3.3.1 Process Creation

Figure 3.7: A tree of processes on a typical Linux system

대부분의 운영 체제는 부팅 시 몇 가지 프로세스를 빌드합니다. 그 후, 기존의 상위 프로세스는 시스템 호출을 통해 새로운 하위 프로세스를 생성합니다. 자식 프로세스는 시스템 호출을 사용하여 자신의 자식을 만들 수 있습니다.

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main()
{
  pid_t pid;
  
  /* fork a child process */
  pid = fork();
  
  if (pid < 0) { /* error occurred */
    fprintf(stderr, "Fork Failed");
    return 1;
  }
  else if (pid == 0) { /* child process */
    execlp("/bin/1s","1s",NULL) ;
  }
  else { /* parent process */
    /* parent will wait for the child to complete */
    wait (NULL) ;
    printf ("Child Complete") ;
  }
  return 0;
}

Code : Creating a separate process using the UNIX fork() system call

fork 함수 추가 설명

Figure 3.9: Process creation using the fork() system call

3.3.2 Process Termination

  • 프로세스는 마지막에 exit 시스템 콜을 사용하여 운영체제에 종료를 요청
  • 부모 프로세스는 자식 프로세스의 상태 코드를 받을 수 있음(wait 함수)
  • 좀비 프로세스, 고아 프로세스는 init 프로세스가 주기적으로 wait 함수를 실행 하여서 제거함

3.4 Interprocess Communication (IPC)

독립적인 프로세스 : 다른 프로레스들과 데이터를 공유하지 않는 프로세스
협력적인 프로세스 : 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받는 프로세스

협력 프로세스를 추구하는 이유

  • 정보 공유
  • 계산 가속화 : 병렬로 실행하게끔 할 수 있기에
  • 모듈성 : 더 나은 프로그램 디자인을 얻을 수 있음

IPC 종류

Figure 3.11: Communication models (a) shared memory (b) message passing

공유 메모리(shared memory) 모델

  • 두 개의 다른 프로세스가 사용할 수 있는 메모리 영역이 설정
  • 두 프로세스는 공유 메모리의 영역에 쓰고 읽는 것만으로 통신

메시지 전달(message passing) 모델

  • 시스템 호출을 사용하여 메시지를 교환하므로 OS는 통신 프로세스의 중개자, 픽업 및 배달 서비스 역할을 함

3.5 IPC in Shared-Memory Systems

특징

  • 프로세스의 통신은 운영 체제가 아닌 사용자 프로세스의 제어 하에 있습니다.
  • 주요 문제는 사용자 프로세스가 공유 메모리에 액세스할 때 작업을 동기화할 수 있는 메커니즘을 제공하는 것입니다.

3.6 IPC in Message-Passing Systems

특징

  • 동일한 주소 공간을 공유하지 않아도 프로세스들이 통신이 가능하다.

메시지 전달 시스템의 주요 함수

  • send(…)
  • receive(…)

3.6.1 Naming

  • 메시지 기반 통신은 직접 또는 간접적일 수 있다.
  • 즉, 프로세스가 메시지를 서로 직접 처리하거나 메일박스 또는 포트로 알려진 데이터 구조 대신 처리할 수 있다.
  • 메일박스는 파일 또는 장치와 몇 가지 유사점이 있으므로 소유자 및 권한 설정이 있을 수 있다.

3.6.2 Synchronization

봉쇄형 보내기 : 보낸 메시지가 수신 프로세스 또는 메일박스한테 수신 될때까지 봉쇄
비봉쇄형 보내기 : 메시지를 보내고 작업을 재시작
봉쇄형 받기 : 메시지를 수신 할때까지 봉쇄
비봉쇄형 받기 : 유효한 메시지 또는 빈 문자열(null)을 받음.

3.6.3 Buffering

교환되는 메시지는 임시 큐에 들어 있음

큐 구현 방식

  • 무용량 (zero capacity) : 큐 크기가 0, 대기하는 메시지 X, 수신할 때까지 대기

  • 유한 용량(bounded capacity) : 유한한 크기 n을 가짐, 꽉 차면 대기

  • 무한 용량(unbounded capacity) : 무한한 용량, 얼마든지 큐에 저장가능, 절대 대기 안함

3.7 Examples of IPC Systems

3.7.1 POSIX Shared Memory

  • shm_open(), ftruncate() 및 mmap() 함수를 사용하여 공유 메모리 개체를 만들고 공유 메모리 개체를 포함하는 메모리 매핑된 파일을 설정합니다.

  • 작성자 이외의 다른 프로세스, 공유 메모리 객체의 이름을 알고 있는 프로세스는 이를 열고 shm_open() 및 mmap()을 사용하여 파일에 매핑할 수 있습니다.

  • 공유 메모리 객체를 제거하기 위한 shm_unlink() 함수도 있습니다.

3.7.2 Mach Message Passing

특징

  • 포트라고 하는 메시지 사서함을 사용하여 통신

  • 메시지를 보내는 사람이 소유자이며, 권한을 설정할 수 있음

  • 메시지는 고정 길이 헤더와 데이터를 포함한 가변 크기 본체로 구성

  • 메시지 헤더에는 수신 및 반환 포트 주소가 포함됩니다.

  • 일반적으로 메시지 시스템의 단점은 이중 복사입니다. 메시지는 종종 발신자 메모리에서 커널 메모리로, 그리고 다시 커널 메모리에서 수신자 메모리로 복사됩니다.

3.7.3 Windows

Figure 3.19: Advanced local procedure calls in Windows

사용자 프로세스는 고급 로컬 프로시저 호출(ALPC)이라는 메시지 전달 기능을 통해 하위 시스템(여러 운영 환경)과 통신합니다.

메세지 전달 기법

  • 메시지 큐 사용 (size < 256)
  • 섹션 객체 (공유 메모리) 사용 (size > 256)
  • OS에 API 요청하여 메모리에 접근 (엄청 클때)

3.7.4 Pipes

3.7.4.1 Ordinary Pipes

일반 파이프 특징

  • 부모 프로세스, 자식 프로세스 간에서만 사용
  • 단반향 통신

Windows는 유닉스 일반 파이프와 유사한 “익명 파이프”를 사용.

3.7.4.1 Named Pipes

UNIX 지명 파이프

특징

  • 부모 프로세스, 자식 프로세스 관계가 아니여도 사용
  • 양방향 통신을 허용하지만 한 번에 한 방향으로만 가능(FIFO 구조)
  • 두 프로세스가 동일한 시스템에 있어야 합니다.
  • 바이트 단위 통신만 지원

Windows 지명 파이프

특징

  • 부모 프로세스, 자식 프로세스 관계가 아니여도 사용
  • 전이중 통신을 지원(동시에 양방향으로 흐를 수 있음)
  • 메시지 단위 통신도 지원

3.8 Communication in Client

3.8.1 Socket

Figure 3.26: Communication using sockets

  • 통신은 한 쌍의 소켓 간에 구성됩니다.
  • 1024 미만의 모든 포트는 잘 알려져 있으며 표준 서비스에 사용됩니다.
  • 프로세스가 실행 중인 시스템을 나타내는 특수 IP 주소 127.0.0.1(루프백)

3.8.2 Remote Procedure Calls, RPC

Figure 3.29: Execution of a remote procedure call (RPC)

RPC를 사용하면 클라이언트가 로컬에서 프로시저를 호출하는 것과 같은 방식으로 네트워크를 통해서만 연결된 원격 호스트에서 프로시저를 호출할 수 있습니다.

Practice Exercises

PDF

results matching ""

    No results matching ""