[운영체제] 프로세스와 스케쥴러

seonja kim·2021년 10월 10일
0

프로세스와 컨텍스트 스위칭

프로세스 구조

  • 프로세스는 일반적으로 어떻게 구성되어 있을까?
    - text(CODE): 코드
    - data: 변수/초기화된 데이터
    - stack: 임시 데이터(함수 호출, 로컬 변수 등)
    - heap: 코드에서 동적으로 만들어지는 데이터

DATA를 BSS와 DATA로 분리

  • BSS : 초기화되지 않은 전역변수
  • DATA : 초기화된 전역변수

PCB

: 프로세스 상태 정보 - PC, SP, 메모리, 스케쥴링 정보 등

  • PC (Program Counter) + SP (Stack Pointer)
  • PCB (Process Control Block)에 저장
    - 1. Process ID
    - 2. Register값 (PC, SP 등)
    - 3. Scheduling info (Process State)
    - 4. Memory Info (메모리 사이즈 limit)
  • PCB: 프로세스가 실행 중인 상태를 캡쳐/ 구조화해서 저장

컨텍스트 스위칭

  • Context Switching (문맥 교환)
    - CPU에 실행할 프로세스를 교체하는 기술
  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서 메인 메모리에 저장
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고, 실행
    • 디스패치 (dispatch) : ready 상태의 프로세스를 running 상태로 바꾸는 것 (PCB정보를 CPU에 넣고 실행하는 과정을 디스패치라고 함)

프로세스 간 커뮤니케이션

  • InterProcess Communication (IPC)
  • 프로세스 간의 커뮤니케이션은 기본적으로 제한되어 있음
  • 프로세스 간 통신은 성능을 높이기 위해 여러 프로세스를 만들어서 동시에 실행할 필요가 있고 이 때 프로세스 간 상태 확인 및 데이터 송수신이 필요
  • IPC 기법의 핵심은 결국 커널 공간을 활용하는 것 (커널 공간은 공유되기 때문에)

예시

  • fork() 시스템콜
    - 프로세스 자신을 복사해서 새로운 프로세스를 만들 수 있음 : 부모, 자식 프로세스

  • 웹서버: 요청이 오면 html 파일을 클라이언트에 제공하는 프로그램
    - 새로운 사용자 요청이 올 때마다 fork() 함수로 새로운 프로세스를 만들고, 각 사용자 요청에 즉시 대응
    - 이 때 각 프로세스 제어 및 상태 정보 교환을 위해 프로세스 간 통신 필요

  • 파일을 사용한 커뮤니케이션
    - 다른 프로세스에 전달할 내용을 파일에 쓰고, 다른 프로세스가 해당 파일을 읽을 수 있도록
    - 한계: 실시간으로 데이터 전달이 어려움 (파일을 읽는 활동이 지속적으로 실시간으로 일어날 수 없으므로)


다양한 IPC 기법

  1. file 사용: 실시간성이 떨어짐
  2. message queue
  3. shared memroy
  4. pipe
  5. signal
  6. semaphore
  7. socket

: 2-7번까지는 모두 커널 공간을 사용한다는 것이 핵심임

IPC 기법 참고자료

  • pipe(파이프)
    - 기본 파이프는 단반향 통신
    - fork()로 자식 프로세스를 만들었을 때, 부모와 자식 간의 통신
  • 메세지 큐(message queue)

    - 양방향
    - 메세지큐는 부모/자식이 아니라 어느 프로세스 간이라도 데이터 송수신이 가능
  • 공유 메모리
    - kernel space에 메모리 공간을 만들고 이를 변수처럼 쓰는 방식
    • 공유 메모리 key를 가지고 여러 프로세스가 접근 가능

IPC 기법과 커널 모드

  • pipe, 메세지 큐는 모두 커널 공간의 메모리를 사용

주요 시그널

  • SIGKILL: 프로세스를 종료 (슈퍼 관리자가 사용하는 시그널로 프로세스는 어떤 경우든 죽게 되어 있음)
  • SIGALARM: 알람을 발생
  • SIGSTP: 프로세스를 멈춤 (Ctrl + z)
  • SIGCONT: 멈춰진 프로세스를 실행
  • SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽여라 (Ctrl + c)
  • SIGSEGV: 프로세스가 다른 메모리영역을 침범했다.

소켓(socket)

  • 소켓은 네트워크 통신을 위한 기술
  • 기본적으로는 클라이언트와 서버 등 두 개의 다른 컴퓨터 간의 네트워크 기반 통신을 위한 기술
profile
Adventurer

0개의 댓글