일기 대신 코드 슬쩍

[운영체제] Processes 본문

OS

[운영체제] Processes

코코자 2024. 4. 1. 16:05

이번에는 아주 중요한 process에 대해 배우기 시작한다.

뭘 배울 건지 먼저 살펴보자.

  • process 표현 방법과 scheduling
  • System call 이용한 process의 생성과 소멸
  • Shared memory와 message passing 이용한 IPC

3.1 Process Concept

기본적인 process의 개념을 살펴보자. process는 무엇인가?????

  • Jobs(program이 수행할 작업) → tasks or user programs
  • OS의 내부 activities
  • 수행 가능한 program이 disk에 저장되어 있는제, 저장되어 있을 때는 걍 data 덩어리지만, program을 CPU를 통해 실행하여 active한 상태가 되었을때, process라고 부름!!!

Process Structure

process의 memory layout을 살펴보면,

  • Stack section: function이 실행되는 동안 local variable이 저장되는 임시 공간으로, 대표적으로 function parameters, return addresses, local variable들이 포함됨
  • Heap section: 프로그램이 실행되는 동안 동적으로 할당되는 변수가 저장되는 공간
  • Data section: 전역 변수를 저장하는 공간
  • Text section: 실행 가능한 코드를 저장하는 공간

data section과 text sectionn만 보면 ⇒ Program이라 할 수 있다.

#include <stdio.h>
#include <stdlib.h>

int x;
int y = 15;

int main(int argc, char *argv[])
{
    int *values;
    int i;

    values = (int *) malloc(sizeof(int)*5);

    for(i=0; i<5; i++)
    {
        values[i] = i;
    }
    return 0;
}

여기서 보면,

  • Stack section: main, values, i
  • Heap section: (int *) malloc(sizeof(int)**5)
  • Data section
    • uninitialized data: x
    • intialized data: y

Process State

process는 실행되면서 다양한 state를 가진다. 어떠한 state를 가질까?process transition diagram을 이용해 표현할 수 이따!!!

  • new: process가 처음 생성된 상태
  • running: process가 수행되는 상태(CPU 점유 중, CPU core당 1개의 running state를 가짐)
  • waiting: process가 발생되어 입/출력 완료를 기다리는 상태, 근데 running state로 바로 갈 수 없는 상태, queue가 있음
  • ready: process가 실행되기 위해 대기하고 있는 상태, running state로 갈 준비가 되어있음, queue가 있음
  • terminated: process 실행이 종료된 상태

Process Control Block(PCB)

PCB는 process가 어떤 상태인지, memory를 어떻게 사용하고 있는지, I/O 장치를 어떻게 사용하고 있는지 등에 대한 모든 정보를 포함한다.

이렇게 생겼다. 각 정보에 대해 조금 더 살펴보자!

  • process state: new, ready, running, waiting, terminated 로 구분
  • process number: (=pid), process 구분하는데 쓰임
  • program counter: CPU에 존재하며, 다음에 실행할 instruction의 주소를 가진다.
  • registers: Instruction Register(IR), Data Register(DR), Program Counter(PC)와 같은 저장공간이 포함된다.
  • CPU-scheduling information: process 실행 순서를 정하는 정보
  • Memory-management information: value of the base and limit registers and the page tables, or the segment tables 등등,,
  • Accounting information: process의 실행, 시간 제한, 실행 ID등에 사용되는 CPU양의 정보
  • I/O status information: list of I/O devices allocated to the process, a list of open files등등..

Threads~~(흠 잘 모르겠담)~~

하나의 single thread에서 파생된 process안의 또다른 작은 process

❓ [프로세스와 쓰레드의 구분]

  • 프로세스는 하나의 single thread를 실행하는 프로그램, 한번에 하나의 task만 실행 가능

 

  • Single thread of execution: process 1개당 1개의 작업 수행
    • ex) word-processor에서 typing하고, spell checking수행
  • Multi threads of execution: multicore system의 이점
    • ex) word에서 typing과 spell checking을 같이 수행

Process Scheduling

Process Scheduler

  • 사용가능한 process중 특정 process를 선별함
  • multiprogramming의 목적: 동시에 여러 process를 실행하여 CPU의 효율을 극대화하는 것
    • multiprogramming: # of process > # of cores, 각 core당 1개의 process만 돌릴 수 있더
  • time sharing system의 목적: 빈번하게 process를 switching 하여 multitasking하는 것
  • CPU-bound or I/O bound
    • CPU-bound: CPU 많이 사용, running state에 오래 머물러있음
    • I/O bound: I/O 많이 사용, CPU에서 running state일 때가 비교적 짧음

Scheduling Queues

  • Ready queue: process가 ready 상태이고 CPU에서 실행되기를 기다린다면 ready queue에 들어감
  • Wait queue: 특정 events가 발생되기를 기다림
  • ready queue, wait queue와 같은 queue들은 PCB들의 linkedlist에서 구현됨

이 그림이 ready queue랑 wait queue를 표현한 것임

queue의 header에서는 많은 정보를 가지진 않고, PCB에 접근할 수 있을 정도의 정보만 가짐

Queueing diagram

 

CPU Scheduling

  • CPU scheduler(=short-term scheduler): ready queue에 있는 process를 선택해서 CPU core에 할당시키는 역할
  • Swapping: 현재 memory에 상주하고 있는 process를 아예 일시적으로 제거하는 역할(secondary storage로 보냄)

Context Switch

  • context: 마지막에 수행했던 명령어 위치, PCB에 표시됨

그렇다면 context switching이란?

  • CPU core를 다른 process에게 양도하는 것
  • 현재 process의 상태를 저장하는 것
  • Context switch를 하게 되면 다른 process의 context를 복원하는 것


3.3 Operations on Processes

운영체제는 프로세스를 생성하고 종료하기도 한다. 하나의 프로세스는 여러개의 새로운 프로세스들을 생성할 수 있다.

  • first user는system bootsㄷ 때 생성되고 항상 pid=1

Process Creation

  • child proecess의 resource를 얻어오는 방법
    • OS로부터
    • parent로부터 (단 parent의 subset만 사용하도록 제한이 가해짐)
  • parent의 실행
    • Child와 공생 (각자 알아서 하는 느낌)
    • Child 실행 결과를 받아온다거나 실행한 뒤에 뭔가 하는 경우( Child가 완전 terminated되어야 실행)
  • Address-space possibilities for child
    • parent 복제해서 사용
    • 새로운 program 로드해서 사용

Creating a separate process

fork()라는 system call을 이용해서 child process를 생성하는 것을 살펴보자!

#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/ls","ls",NULL);
}
else { /* parent process */
/* parent will wait for the child to complete */
	wait(NULL);
	printf("Child Complete");
}
return 0;
}

위의 코드는 부모 process와 자식 process에 대한 예제이다.

설명해보자면 부모 프로세스가 자식 프로세스를 생성하고,

부모 프로세스는 자식 프로세스가 종료될 때까지 기다리다가 “Child Complete”을 출력한다.

fork()함수를 호출하면 부모 프로세스는 자식 프로세스의 번호를 반환받고 wait()대기한다.

자식 프로세스가 생성되고 자식 프로세스는 fork()함수 이후의 문장을 수행한다.

pid variable은 자식 프로세스이기 때문에 0이 저장된다. 그리고 자식 프로세스의 “ls”를 수행하고 부모가 대기가 끝나고 출력을 수행한다.

이 그림이 그 과정이다. 잘 이해하고 있을 것!!!!

Process Termination

프로세스의 종료는 마지막 문장을 실행할 때이다. exit() system call이 오면 child에게 할당했던 resource(memory, open files, I/O buffers)들이 반납된다.

  • Zombie process: parent가 call되기 전에 child가 terminated됨, 실행이 종료되었지만 아직 삭제되지 않은 프로세스
  • Orphan process: parent가 wait()을 콜하기전에 terminated됨(이러면 새로운 init이라는 program을 할당해서 parent로 설정함), 부모프로세스가 자식 프로세스보다 먼저 종료된 프로세스

다른 프로세스에의해 termination되는 경우도 존재한다.

  • 과도한 resource 사용으로 child를 견딜 수 없을 때
  • parent가 child한테 시킨 task가 더이상 필요 없을 때
  • parent가 비정상적으로 존재하거나 terminated되는 경우이번에는 아주 중요한 process에 대해 배우기 시작한다.
    •  

'OS' 카테고리의 다른 글

[운영체제] Threads & Concurrency  (0) 2024.04.11
[운영체제] Processes(2)  (2) 2024.04.03
[운영체제] OS 구조  (0) 2024.04.01
[운영체제] OS 소개(2)  (0) 2024.03.31
[운영체제] 컴퓨터 구조 및 OS 소개  (0) 2024.03.27