[Operating System] Processes

hina·2023년 7월 6일
0

Operating System

목록 보기
2/9

Process Concept


Process Concept

  • 프로세스의 정의

    • A Program in execution
    • 프로세스 상태 (process state)를 문맥으로 가지는 실행 중인 흐름.
    • Process state: 프로세스와 영향을 주고 받는 모든 요소. (code, data, values, ...)
    • Execution stream (실행 흐름): 코드가 한 줄씩 실행되는 흐름 그 자체를 의미한다.
  • Process state (=context)의 3가지 종류

    1. Memory context: code segment, data segment, stack segment, heap
    2. Hardware context: CPU register, I/O register
    3. System context: Process table, open file table, page table -> 커널이 관리하고 있는 정보.

Program은 디스크에 저장되어 있는 수동적인 실행 파일을 뜻하고, Process는 능동적인 존재다.

  • Program은 실행파일이 메모리에 로드되면 process가 된다.

Multiprogramming vs. Multiprocesing

  • Uniprogramming

    • 한 순간에 메모리에는 하나의 프로그램만 가능하다.
    • 옛날 PC의 OS에서 이용됐으며 OS를 만들기에는 쉬우나 다른 부분에서 어렵다.
  • Multiprogramming

    • 한 순간에 메모리에 여러 개의 프로그램이 가능하다.
    • 대부분의 시스템은 멀티프로그래밍을 지원한다.
  • Multiprocessing

    • CPU 관점으로 프로세스 여러 개가 함께 돌아간다.
    • 멀티 프로세싱이라면 멀티 프로그래밍이어야 하지만, 그 역은 성립하지 않는다.
  • Multiprogrammig을 통해 OS는 process들을 유지해야 한다. 각각의 프로세스마다 PCB (Process Control Block)으로 관리한다.

Process State


Process state

  • 프로그램이 실행되는 동안, process state는 수시로 바뀐다.
    • new: 프로세스 생성
    • running: 명령어 실행 중인 상태
    • waiting: 이벤트가 발생해 대기 중인 상태
    • ready: 프로세서에 할당되기 전에 대기 중인 상태
    • termintated: 프로세스 실행 종료

State Transition

  • Ready Queue: 바로 실행될 수 있지만, 실행될 자리가 없어서 대기 중인 프로세스들이 위치한 곳.

  • Device Queue (I/O waiting Queue): I/O device wait으로 인해 밀려난 프로세스들이 위치한 곳.

  • job Queue: 위의 두 큐를 포함하여 시스템의 모든 프로세스의 집합.

Schedulers

  • Short-term scheduler (or CPU scheduler): ready queue에 있는 프로세스 중 실행시킬 것을 결정하는 스케줄러이다. 다음에 실행할 프로세스를 선택하고, CPU에 할당한다.
    -> 자주 호출되므로, must be fast

  • Long-term scheduler (or Job scheduler): ready queue에 올릴 프로세스를 결정한다. degree of multiprogramming을 결정한다.
    -> 자주 호출되지 않으므로, may be slow

  • 프로세스 구분하기

    • I/O bound process: 입출력 수행해 시간이 많이 걸리는 프로세스. CPU에 시간이 얼마 안 걸린다.
    • CPU bound process: CPU 연산에 시간이 많이 걸리는 프로세스이다.
    • 좋은 long-term scheduler는 두 프로세스가 적절히 섞인 경우일 것.

CPU Switch From Process to Process

  • CPU가 다른 프로세스로 교체할 때, 시스템은 context switch를 통해 실행 중이던 프로세스의 상태를 PCB에 저장하고, 새로운 프로세스의 상태를 가져온다.

  • Context-switch는 시간이 오래 걸리므로, 자주 사용하지 않도록 해야 한다. (OS와 PCB가 복잡할수록 context-switch 시간은 길어진다.)

Process Creation and Termination


Process Creation

  • 부모 프로세스는 자식 프로세스를 생성한다. 또, 그 자식 프로세스는 다른 프로세스를 생성하여 트리 구조를 만든다.

  • 프로세스는 프로세스 식별자 (pid)를 통해 관리된다.

  • Resource sharing options

    • 부모와 자식은 모든 자원을 공유한다. (linux)
    • 부모와 자식은 일부만 공유한다.
    • 부모와 자식간에 공유하지 않는다. (windows)
  • Execution options

    • 부모와 자식이 concurrently 하게 각각 동시 실행된다.
    • 자식이 먼저 실행되고, 자식이 종료된 후 부모가 실행된다.
  • fork() : 새로운 프로세스 생성. (복제)

    • fork()의 return 값
      • 0인 경우: 자식 프로세스임을 의미
      • else인 경우: 자식의 pid를 return함.
  • exec() : fork()한 후, 새로운 프로그램으로 내용을 교체한다.

예시 코드

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

int main() {
	pid_t pid;
	pid = fork();
	if (pid < 0) {
		fprintf(stderr, "fork failed");
		return 1;
	}
	else if (pid == 0) { // child process
		execlp("/bin/ls", "ls", NULL);
	}
	else { // parent process
		wait(NULL); // 부모 프로세스가 자식 프로세스가 종료되길 wait
		printf("child complete");
	}
	return 0;
}

Process Termination

  • 프로세스는 마지막 문을 실행한 다음, exit()을 실행해 OS에 종료를 요청한다.

    • wait()을 통해, 자식에서 부모로 상태 데이터를 return한다. 따라서, wait()은 자식의 종료 상태를 알 수 있다.
    • 프로세스가 할당 해제된다.
  • 부모는 중단 시스템콜을 호출하여 자식 프로세스를 종료시킬 수 있다. 이것을 호출하는 이유 3가지

    1. 자식이 필요 이상의 자원을 사용하기 때문에
    2. 자식이 수행하고 있는 일이 필요없어졌기 때문에
    3. 부모가 먼저 종료되기 때문에
  • 부모가 종료되었을 경우 자식이 존재하는 것을 허용하지 않는 OS는, Cascading termination을 사용한다. 이는 부모가 종료될 때 모든 자식, 손자... 가 연쇄적으로 종료된다. 이 종료는 OS에 의해 시작된다.

  • 부모 프로세스는 wait()을 호출하여 자식 프로세스가 종료되기까지 기다릴 수 있다. wait()은 종료 정보와 종료된 프로세스의 pid를 반환한다.

    좀비 프로세스: 프로세스가 종료됐는데, 기다리고 있는 부모 프로세스가 없는 경우

    고아 프로세스: 부모가 자식을 기다리지 않고 먼저 종료되었을 경우

Inter-process Communication (IPC)

💡 프로세스 간에 IPC가 필요한 이유?
-> 스레드는 stack 공간을 제외하고 다른 메모리 영역을 스레드 간에 공유하지만, 프로세스는 각각 독립적이다. 그러나 여러 이유에 따라 프로세스간의 협력이 필요하다. 따라서 프로세스 간 협력을 위해 IPC가 필요하다!

  • 협력 프로세스는 다른 프로세스에 영향을 받거나, 영향을 줄 수 있다.

  • 프로세스 협력이 필요한 이유

    • information sharing
    • computation speedup
    • Modularity
    • Convenience
  • IPC의 종류

    • Shared memory
    • Message passing

Communication Models

  • Message passing

    • 장점: 양방향이므로 충돌할 일이 없으며, 동기화를 고려할 필요가 없다.
    • 단점: 크기가 작아 커널에 매번 요청해야 하므로 속도가 느리다.
  • Shared memory

    • 장점: 큰 데이터를 공유하기에 좋지만 충돌할 가능성이 있다.
    • 단점: 동기화가 필수적이다. 따라서 복잡해질 수 있다.
profile
🖥️

0개의 댓글