1. 프로그램

 1.1. 프로그램이란

  • 프로그램은 실행 파일을 의미
  • 주기억 장치에서 상주된 프로그램이 CPU에 의해서 처리되는 상태는 프로세스라고 함

1.2. 프로그램 실행 과정

  1. 사용자가 OS에게 프로그램 실행 요청
  2. 운영체제가 프로그램의 정보를 메모리(주기억장치_RAM)에 로드
  3. CPU가 프로그램 코드를 관리&명령 실행

 

 

2. 프로세스

2.1. 프로세스란(개념, PID, PPID, init, 관련 명령어)

  • 메모리에서 CPU를 할당 받아 실행 중인 프로그램
  • 각각의 프로세스마다 고유 번호의 프로세스 ID(PID)를 하나씩 증가하면서 부여

  • PPID (부모 프로세스)
    - 선행 프로세스라고도 하며, 자식 프로세스 생성 가능
    - fork() 호출을 통해 자식 프로세스 생성
    - 부모 프로세스는 여러 개의 자식 프로세스를 실행하여 다수의 작은 작업들을 동시에 처리 

  • 자식 프로세스
    - 부모 프로세스가 처리 중인 파일 등을 공유
    - 부모 프로세스에서 fort()하여 생긴 프로세스
    - 프로그램에서는 부모 프로세스의 복사로 부모와 교신하면서 프로세스 진행

  • init
    - 부팅되면서 가장 먼저 실행되는 프로세스는 init, init의 PID는 1
    - init 프로세스는 파일 시스템의 구조 검사
    - 파일 시스템의 마운트하고 서버 데몬을 실행하며, 사용자 로그인을 기다리고 사용자를 위한 셸을 실행하는 역할
    - /etc/initab : 처음 수행해야할 작업들을 설정하는 파일, 시스템의 상태에 따라 해당하는 런레벨에서 init 프로세스가 수행해야할 파일을 지정

2.2 프로세스 관련 명령어

  • ps 명령어 : 현재 작동하는 프로세스 목록, 프로세스의 현재 상태 출력

 

  • kill 명령어 : 현재 작동하는 프로세스 종료

 

  • top 명령어 : 실시간 프로세스 모니터링

 

2.3. 프로세스 상태

  • 프로세스의 상태 종류 : 생성, 준비, 실행, 대기, 종료
    1. new : 프로세스가 생성된 상태
    2. ready : 프로세스가 생성된 후 프로세서에 할당되기를 기다리는 상태
    3. running : 프로세서에 할당되어 CPU를 차지하고 있는 상태
    4. wait : 프로세스가 특정 이벤트를 기다리는 상태 → 프로세서에 할당되어 있지만 프로세서의 클락을 낮추거나 일시적으로 멈춤으로써 에너지 소비를 줄일 수 있는 상태
    5. terminated : 프로세스 종료된 상태

 

  • 프로세스의 상태 전이
    1. Dispatch (ready -> running)
      • 여러 프로세스들 중 한 프로세스를 선정하여 CPU에 할당하는 과정
    2. Interrupt (running -> ready)
      • 할당된 CPU 시간이 지나면 Timeout Interrupt 가 발생하여 CPU를 다른 프로세스에게 양도하고 자신은 ready 상태로 전이되는 과정
    3. Block (running -> waiting)
      • I/O 등의 자원 요청 후 즉시 할당받을 수 없어, 할당받을 때까지 기다리기 위해 running에서 waiting 상태로 전이되는 과정
      • I/O 처리는 CPU가 아닌 I/O 프로세스가 담당하기 때문에 block이 발생함
    4. Wakeup (waiting -> ready)
      • 필요한 자원이 할당되면 프로세스는 waiting에서 ready 상태로 전이되는 과정

 

2.4. 프로세스의 구성

2.4.1. 프로세스 메모리 

  • 운영체제는 프로세스마다 고유의 가상 메모리 공간 제공
  • 프로세스 메모리 공간은 다시 코드, 데이터, 스택, 힙 영역으로 세분화

  • text section instruction(text section)
    - 컴파일된 기계어가 저장되는 영역
    - compile time에 크기 결정

  • data section
    - 사전에 선언된 데이터가 저장되는 영역
    - compile time에 크기 결정
    - 내부 data&bbs 영역으로 구분 
       initalized data section → 초기화된 전역 변수가 저장되는 영역 (DATA)
      uninitialized data section 초기화되지 않은 전역 변수가 저장되는 영역 (BBS)

  • heap 
    - new, delete, malloc, free 등을 호출하여 데이터를 저장 & 관리하는 영역
    - runtime에 크기가 결정

  • stack
    - 매개변수, 지역변수, return 주소 등과 같은 데이터를 저장하는 영역
    - 컴파일러에 의해 run time 도중 크기가 결정되며, 함수가 호출 & 종료되는 시점에 생성 & 제거

2.4.2. PCB (Process Control Block)

  • PCB는 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조
    • 운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스
    • 운영체제에서 프로세스는 PCB로 나타냄
    • PCB는 프로세스에 대한 중요한 정보를 가지고 있는 자료 구조

  • 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됨
    • 프로세스는 CPU를 점유하여 작업을 처리하다가도 상태가 전이되면, 진행하던 작업 내용들을 모두 정리하고 CPU를 반환 필요
    • 진행하던 작업들을 모두 저장하지 않으면 다음에 자신의 순서가 왔을 때 어떠한 작업을 해야하는지 알 수 없는 상태에 빠짐
    • 프로세스는 CPU가 처리하던 작업의 내용들을 자신의 PCB에 저장하고, 다음에 다시 CPU를 점유하여 작업을 수행해야 할 때 PCB로부터 해당 정보들을 CPU에 넘겨와서 계속해서 하던 작업을 진행할 수 있음

 

  • PCB는 다른 프로세스들이 쉽게 접근할 수 없고, kernel 영역에 저장
  • PCB 저장 정보 : process state, PID, PPID, CPU registers, program counter, CPU scheduling 정보, Memory 관리 정보, accounting 정보, I/O 상태 정보

 

 

+ Recent posts