반응형
Notice
Recent Posts
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Today
Total
관리 메뉴

오식랜드

[운영체제] 프로세스 (process) 본문

dev-log/cs

[운영체제] 프로세스 (process)

개발하는 오식이 2023. 9. 27. 14:30
반응형

프로그램

  • 저장장치(하드웨어)에 저장되어있는 정적인 상태

프로세스

  • 메모리에 올라온 동적인 상태
  • 실행중인 프로그램
  • 메모리에 적재되어 운영체제의 제어를 받는 상태
  • 프로세스가 사용하고 있는 메모리 영역이 존재함을 의미 (자신의 주소공간이 존재)
  • 운영체제로부터 프로세스 제어 블록을 얻는다는 뜻
    • 하드웨어에서 메모리로 옮기기와 같은 기능을 운영체제가 해줌
    • 클릭 시 프로그램이 메모리로 적재 (프로세스)가 됨
    • 프로그램 크기 계산
    • 크기만큼 메모리 공간 확보 등의 일을 함

프로세스의구조

  • 코드영역
    • 읽기 전용
    • 프로그램의 본문이 기술된 곳
    • 프로그래머가 작성한 코드가 있음
    • CPU에서는 읽기만 가능
  • 데이터 영역
    • CPU가 읽기, 쓰기 가능
    • 코드가 실행될 떄 쓰는 변수나 파일 등의 데이터 집합
  • 스택 영역
    • 운영체제가 프로세스를 실행하기 위해 데이터를 쌓는 곳
    • 운영체제 관할이라 우리는 관여하지 못함
    • heap: stack 영역 상단에서 부터 쌓임. 무한루프같은 작업시 heap overflow 발생
    • stack : stack영역 하단에서부터 쌓임

프로세스 제어 블럭 (PCB : Process Control Block)

  • 운영체제가 프로세스를 관리하는 자료구조
  • 프로그램 종료시 PCB 폐기
  • 갖고있는 정보
    • 프로세스 구분자 (Porcess ID, PID)
    • 메모리 위치 정보
    • 각종 중간 값

프로세스의 상태

  • 활성 상태 5가지
    • 생성 (creation)
      • 프로세스가 메모리에 올라와 실행 준비 완료한 상태 (PCB 생성)
    • 준비 상태 (ready status)
      • 프로세스가 CPU를 얻을 때까지 기다리는 상태
    • 실행 상태 (running status)
      • CPU를 얻어 실제 작업을 수행중인 상태
    • 대기 상태 (blocking status)
      • 프로세스가 입출력을 하는 동안 대기하는 장소
      • 그동안 CPU는 다른 프로그램을 실행
    • 완료 (terminate)
      • 주어진 시간 동안 작업이 완료된 상태 (PCB 삭제)
  • 보류 상태 2가지
    • 보류 대기 상태 Suspend Status
      • block → suspend : 보류
      • suspend → block : 재시작
      • 프로세스가 메모리에서 잠시 쫒겨난 상태
      • 메모리가 꽉 차서 하드디스크의 가상메모리로 옮겨짐
    • 보류 준비 상태
      • 활성 상태로 가기 위한 준비 상태 (ready로 갈 준비)
  • 휴식 상태
    • 프로세스가 일시정지 된 상태

프로세스의 4가지 전이

  • dispatch : 준비 → 실행
    • 준비상태의 프로세스 중 실행상태로 바꾸는 것
  • time out : 실행 → 준비
    • 인터럽트 : CPU가 중지 명령을 받은 것
    • 주어진 타임슬라이스 내에 작업을 끝내지 못해 다시 준비상태로 돌아가는 것
  • blocking : 실행 → 대기
    • 실행중이던 프로세스가 입출력 요청 시 대기상태로 빠지게 됨
    • 그동안 CPU는 다른 작업을 실행함
  • wake up (unblocking) : 대기 → 준비
    • 입출력이 완료 된 프로세스는 다시 CPU를 얻기 위해 준비상태로 들어감

프로세스 생성과 복사

fork()

  • 실행중인 프로세스를 복사
  • Ctrl+N
  • 기존 프로세스는 부모, 새로생긴 프로세스는 자식이 된다.
  • 프로세스 생성 속도가 빠르다
  • 자원 상속 가능 (ex. 크롬 복사 시 즐겨찾기 그대로)
  • PCB 중 변경되는 내용
    • 프로세스 구분자 PID (같으면 안됨)
    • 메모리 주소 (같으면 안됨. 각자의 메모리가 있음)
    • 부모 프로세스 구분자 (PPID)
    • 자식 프로세스 구분자 (CPID)

exec()

  • 기존의 프로세스를 재사용
  • 프로세스는 그대로 둔 채 내용만 바꿈
  • PID가 그대로
  • 코드 영역의 내용을 새로운 내용으로 바꿈
  • 테이터영역은 새 변수로 채워짐
  • 스택 영역은 리셋
  • 보통 fork()와 함께 사용이 됨

프로세스 계층 구조

  • 여러 작업을 동시에 처리 가능
  • 프로세스 재사용이 용이
  • 자원 회수가 쉬움

고아 프로세스

  • 부모 프로세스가 먼저 종료되어 돌아갈 곳이 없는 프로세스

좀비 프로세스

  • 자식 프로세스가 종료되었는데, 부모 프로세스가 뒤처리를 하지 않아 발생하는 프로세스
  • exit() 또는 return()을 통해 자식프로세스 작업이 끝났음을 부모에게 알려야 함
반응형
Comments