CS/CS STUDY

2022.01.23. 1차 CS 스터디: 운영체제/커널/프로세스/PCB/스레드/TimeSharing/ContextSwitch/fork/vfork/좀비프로세스/고아프로세스

ImYena 2022. 1. 18. 17:13
728x90

운영체제(OS, Operating System)

시스템 하드웨어 관리와 응용 소프트웨어를 실행하기 위한 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어

> 한정된 자원으로 효율적인 일처리를 하도록 편하게 도와주는 소프트웨어

 

사용 목적

  • 편리성
    • CUI
    • GUI
  • 효율성
  • 시스템 보호
  • 프로세스와 쓰레드 관리

 

구조

 

커널(Kernel)

  • 운영체제의 핵심으로 메모리에 상주하여 가장 빈번하게 사용되는 기능 담당
    • 프로세스, 메모리 관리 등
  • 핵, 관리자 프로그램, 상주 프로그램, 제어 프로그램이라고도 함

 

시분할 시스템(Time Sharing System)

시분할 시스템(Time Sharing System)

  • 여러 사용자가 시스템 및 가상 메모리 관리
  • 사용자 지향적(User-oriented)

 

장점

  • 응답시간 단축
  • 생산성 향상, 프로세서 유휴 시간 감소

단점

  • 통신 비용 증가
  • 통신으로 인한 보안 문제 발생
  • 개인 사용자 관점 체감 속도 저하

 

  • 동시성(Concurrency) : 프로세스 A, B가 5분씩 10분 작업하는 경우
  • 유사성/병행성(Parallelism) : 프로세스 A, B가 5분씩 5분 작업하는 경우 ex) 듀얼코어, 쿼드코어

 

프로세스(Process)

  • 실행 중인 프로그램
    • 프로그램에 CPU에 올라가야 프로세스!
  • 실행을 위해 시스템(커널)에 등록된 작업
  • 각종 자원들을 요청하고 할당 받는 개체
  • 능동적인 개체(Active Entity)
  • CPU를 공유하는 여러 작업 간의 구분을 위한 단위
    • 각 프로세스는 컴퓨터 시스템을 독점 사용하는 것으로 인식

 

프로세스 메모리

  1. code
    • 소스코드
  2. data
    • 프로그램이 종료될 때까지 살아있는 변수 ex) static 변수, 전역변수
  3. heap 
    • 동적으로 저장되는 변수
  4. free store
    • 여유 공간
  5. stack
    • 지역변수

> heap과 stack은 크기가 동적인 변수가 저장됨

> stack overflow 에러 : 최대치의 stack이 heap의 영역을 침범, heap의 데이터 소설 가능성

> heap overflow 에러

 

프로세스 상태

  1. 시작(New/Created)
    • 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만, 아직 메모리 획득을 승인받지 못한 상태
  2. 준비(Ready)
    • 프로세스가 CPU를 보유하면 당장 명령을 실행할 수 있지만, CPU를 할당받지 못한 상태.
  3. 실행(Running)
    • 프로세스가 CPU를 보유하고 있고, 기계어 명령을 실행 중인 상태
  4. 대기(Waiting, Blocked, Sleep)
    • 프로세스에게 CPU를 주어도 당장 명령을 실행할 수 없는 상태
    • 실행될 작업 없이 대기하는 경우
  5. 완료(Terminated)
    • 프로세스가 종료되었지만, 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리되지 못한 상태

 

Interrupt(인터럽트)

  • 예상치 못한 외부에서 발생한 이벤트
    • I/O, Clock, Console. Program check, Machine check, Inter-process, System call 등

인터럽트 처리 과정

  • 인터럽트 발생 시 CPU의 제어권이 운영체제로 넘어감, 그러면 운영체제는 인터럽트 처리 루틴으로 수행 중이던 프로세스의 문맥을 저장하고 준비 상태에 있는 프로세스 중 새롭게 CPU 제어권을 넘길 프로세스를 선택함

 

Context Switching(문맥 교환)

  • 실행 시킬 프로세스를 변경하기 위해 원래 수행중이던 프로세스 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정

  • Context: 프로세스와 관련된 정보들의 집합
  • CPU가 여러 프로세스를 처리할 때, 기존에 작업하던 프로세스의 정보(Register Context)를 저장하고(Context saving), 새로 처리할 프로세스의 정보(Register Context)를 불러오는 것(Context restoring)
    • 기본적으로 overhead(비용)가 발생
    • 운영체제마다 다르며 성능에 큰 영향
    • Thread 등을 사용하여 불필요한 context switching을 줄여야 함

> 시분할 시스템에서 A > B 프로세스로 바뀌는 것

> A > B로 넘어갈 때 A의 내용을 저장해야 함, 저장공간=PCB

 

프로세스 관리 블록(PCB, Process Control Block)

  • 운영체제가 프로세스 관리에 필요한 정보 저장
    • PID(Process Identification Number)
    • 스케줄링 정보
    • 프로세스 상태
    • 메모리 관리 정보
    • 입출력 상태 정보
    • 문맥저장 영역
    • 계정 정보
  • 프로세스 생성시 생성 됨
  • 각 프로세스들의 상태 정보 저장

 

프로세스(Process)와 스레드(Thread)

프로세스

  • 어떠한 목적을 위해 연산을 하는 과정
  • 자원을 할당받고 그 자원을 제어

 

스레드

  • 프로세스가 돌아가는 과정 중 제어 부분 의미
  • 하나의 프로세스에 여러 개의 스레드 존재 가능
  • 스레드는 프로세스와 다르게 하나의 자원을 여러 스레드가 공유 가능

 

포크(fork)

  • 프로세스가 자기 자신을 복제하는 동작(자식 프로세스 생성)
  • 시스템 호출의 일종으로 커널 안에서 구현됨
  • 유닉스 계열 운영체제에서 프로세스를 만드는 주된 방식

 

fork vs vfork

  • fork
    • 부모 프로세스의 메모리, 파일 기술자 테이블 등 모두 복사하여 프로세스 구성
    • 자원을 복사하는 오랜 시간 소요
  • vfork
    • fork 오랜 시간이 소요되는 단점을 극복하기 위해 만들어진 대안
    • 부모 프로세스의 자원을 복사하는 것이 아닌 자원 공유

 

좀비 프로세스 vs 자식 프로세스

  • 좀비 프로세스
    • 자식 프로세스가 부모 프로세스 보다 먼저 종료되는 경우
      1. 자식 프로세스가 exit 시스템 콜을 호출 하면서 종료, 관련 모든 메모리와 리소스가 해제되면서 다른 프로세스에서 사용 가능하게 됨
      2. 자식 프로세스가 종료된 후 부모 프로세스가 자식 프로세스의 상태를 알고 싶은 경우가 있기 때문에 커널은 자식 프로세스가 종료되더라도 최소한의 정보(프로세스 ID, 프로제스 종료 상태 등)를 가지고 있게 되는됨
      3. 부모 프로세스가 좀비 프로세스의 종료 상태를 회수(wait 시스템 콜 호출을 통해)하게 되면 좀비 프로세스는 제거됨
    • 좀비 프로세스가 쌓이게 되면 리소스의 유출을 야기
  • 자식 프로세스
    • 부모 프로세스가 자식 프로세스보다 먼저 종료되는 경우, init 프로세스가 자식 프로세스의 새로운 부모 프로세스가 됨
    • 종료되는 프로세스가 발생할 때 커널은 이 프로세스가 누구의 부모 프로세스인지 확인한 후, 커널이 자식 프로세스의 부모 프로세스 ID를 1(init 프로세스)로 바꿔 줌

 


참고 및 출처)

 

프로세스 관리-01

프로세스의 개념 실행중인 프로그램 : program in execution디스크에 존재하던 프로그램이 메모리에 적재됨.프로그램이 CPU를 할당받아서 기계명령(instruction)을 수행하고 있는 상태. 일반적으로 JOB이

eunhyejung.github.io

 

728x90
반응형