Process

2024. 4. 28. 15:48·CS/OS
728x90
반응형

Program vs Process

Program : 기계어 instructions + 디스크의 static data의 집합

  • 컴파일된 exe파일
  • 기계어 instruction : cpu가 이해하는 언어 
  • static data : 컴파일 될 때 해당 메모리 영역이 유지되며, 변경된 값이 유지되고, 어디서든 접근 가능 ex) global, static

exe파일이 여러번 실행 >> process 여러개 생성 

 

Process : 실행되고 있는 프로그램

  • 메모리 : instructions (메모리에 적재 - code) & data (프로그램 실행에 따라 변경됨)
  • 레지스터 : program counter (cpu가 실행해야하는 인스트럭션 위치를 가리키는 레지스터 ) & stack pointer 등
  • 오픈한 파일의 list와 상태정보 등

Virtualization of the CPU

Q. How can we provide the illusion? 어떻게 cpu가 여러개의 프로그램을 실행하는 것처럼 환상을 제공하는가?

A. time sharing을 통해 제공

Time sharing

(cpu virtualization을 위한 방법)

  • CPU가 몇개 있는지와 관계 없이 process를 실행시킬 수 있다. → illusion 제공 (가진 cpu < 프로세스 인 경우에도)
  • Potential cost : 모든 프로세스의 성능이 유지될 수 있을 것인가?
  • context switch & scheduling policy에 따라 구현됨

context switch - overhead가 존재함

scheduling policy - 운영체제 정책에 따라 cpu 스케줄링이 어떻게 일어날 것인지 결정됨

 

Process State 

cpu state

  • Running : cpu 자원을 할당받아 프로세스가 실행되고 있는 상태 - 한 개의 process만 run 상태일 수 있음
  • Ready : 기다리는 상태 - queue로 이루어져있어, 여러개의 process가 ready 상태일 수 있음
  • Blocked (Waiting) : cpu를 할당받아도 아무것도 안하는 상태 (데이터의 입력을 기다리는 등) / 프로세스가 cpu를 할당받아도 작동할 준비가 되어있지 않음
    ex) wait sytem call : 어느 프로세스가 끝날지 기다려야하므로 cpu를 할당받아도 아무것도 하지 않음

Scheduling Queues

OS 는 세가지 종류의 queue를 다룸

  • Run queue
  • Ready queue - 다음에 실행할 프로세스를 효과적으로 찾아야함
  • Watiting queue

CPU : 상태마다 queue를 만들어서 프로세스를 해당하는 상태의 queue에 넣어둠

Linux 의 경우 red-black tree로 queue를 만들어놓음

Example of Process State

Time \(P_0\) \(P_1\) Notes queue 상태
1 Running Ready   run - \(P_0\)
ready - \(P_1\)
2 Running Ready \(P_0\)의 I/O 요청이 발생함  
3 blocked running   run - \(P_1\)
wating - \(P_0\)
4 blocked running \(P_0\)의 I/O 요청이 끝남  
5 ready running 운영체제 정책 - \(P_0\), \(P_1\) 모두 cpu를 할당 가능 run - \(P_1\)
ready - \(P_0\)
6 ready running \(P_1\) 종료  
7 running     run - \(P_0\)
8 running      

 

* \(P_0\)의 I/O가 종료될 때 : I/O디바이스가 생성하는 인터럽트에 의해 인터럽트 핸들러가 실행 >> block → ready

* 인터럽트가 발생하면 cpu 스케줄러가 어디에 cpu를 줄 지 결정함 - 이 경우에는 그대로 \(P_1\)에게 준 것 

 

cpu 점유

0 0 1 1 1 1 0 0

 

 

PCB (Process Control Blocks)

프로세스 생성 >> 프로세스를 관리하기 위한 자료구조 PCB를 생성함

kernel/include /linux/sched.h

struct task_struct { //PCB의 역할을 함 
    volatile long state; 
    /* TASK_RUNNING : running인지 여부 확인
       TASK_INTERRUPTIBLE .. : blocked의 종류가 다양함 - state가 많음*/
    void *stack;  // 커널 스택을 가리키는 stack pointer
    
    unsigned int cpu; // 몇번 cpu를 사용하는지 - 몇번 코어인지
    
    struct mm_strcut *mm; // memory vartualization 정보 - 구조체의 시작점
    
    // 프로세스간의 관계 정보 (fork)
    struct task_strcut *parent; // parent process
    struct list_head children; // circulary doubled linked list로 관리함 - child 여러개
    
    struct files_struct *files; //open한 파일들의 정보
}
  • 각각의 프로세스는 user-mode stack & kernel-mode stack을 가지고 있음

 

728x90
반응형

'CS > OS' 카테고리의 다른 글

운영 모드  (0) 2025.01.12
CPU Scheduling  (2) 2024.08.12
Limited Direct Execution  (0) 2024.04.28
Data Structures (Process Control Blocks)  (0) 2024.03.10
Disk Scheduling (디스크 스케줄링)  (0) 2024.02.05
'CS/OS' 카테고리의 다른 글
  • CPU Scheduling
  • Limited Direct Execution
  • Data Structures (Process Control Blocks)
  • Disk Scheduling (디스크 스케줄링)
min_zu
min_zu
  • min_zu
    민주제도
    min_zu
  • 전체
    오늘
    어제
    • ._. (176)
      • AI (2)
        • DeepLearning (2)
        • CS231n (0)
      • Web (2)
        • ReactJS (0)
      • CS (83)
        • OS (7)
        • Data Structure (23)
        • Computer Architecture (8)
        • Computer Network (20)
        • Algorithm (25)
      • Linux (3)
        • KaliLinux (0)
        • Docker (1)
      • Hacking (83)
        • Write Up (25)
        • Pwnable (13)
        • Reversing (2)
        • Cryptography (12)
        • Web Hacking (4)
        • Window (6)
        • Network (7)
        • Web3 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Sort
    Tree
    AI
    DataStructure
    Search
    Linux
    DeepLearning
    UTM
    OS
    Web
    Mac
    ComputerArchitecture
    Graph
    WinAFL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min_zu
Process
상단으로

티스토리툴바