프로세스

sun202x·2023년 1월 18일
0

운영체제

목록 보기
9/23
post-thumbnail

해당 게시글은 kocw에서 제공하는 금오공과대학교 최태영 교수님의 무료 강의를 공부하고 정리하기 위해서 만들어졌습니다.

프로세스

  • 메인 프레임에서 작업을 만들어서 관리자에게 던져주고 이러한 작업이 쌓여있는 프로그램을 “Job”이라고 한다.
  • 일반 사용자가 컴퓨터를 통해 프로그램을 만들고 프로그램을 수행하는 것을 “User Program” 또는 “Task”라고 부른다.
  • 이러한 개념들을 통합해서 “Process”라고 한다.
    • 경우에 따라서 Job, Task라고 부르기도 한다.
  • 프로그램
    • 하드디스크나 2차 저장장치에 실행시킬 수 있는 형태로 저장되어 있는 Passive한(수동적인) 객체이다.
  • 프로세스
    • 메모리에 올라와 있고, cpu를 얻기만 하면 Active하게(능동적인) 일을 하는 주체가 프로세스이다.
  • 프로그램에 해당되는 아이콘을 더블클릭하거나, CLI에서 프로그램 이름을 타이핑 함으로써 프로세스가 생성된다.
  • 하나의 프로그램에서 프로세스는 여러 개가 존재할 수 있다.

프로세스 구조

  • 프로세스는 여러 개의 덩어리로 이루어져있다.
    • Text section: 실행코드
    • Program Counter: 현재 실행 중인 코드 포인터
      • Process Register: 수행 단계에서 필요하거나 수행 결과를 저장하기 위한 레지스터
    • Stack: 현재 컴퓨터들은 모두 함수를 호출하도록 되어있기 때문에 필요
    • Data section: 전역 변수가 존재하는 영역
    • Heap: 동적으로 메모리를 할당
  • 프로세스를 메모리 영역에서 표현하면
    • 0번째 주소 부터 차례대로
      • text
      • data
      • heap
      • 동적 영역
      • stack
  • 형태로 구성되며, 이 때 메모리 주소가 0을 가리키는 이유는 가상 메모리 주소를 사용하기 때문이다.
    • 실제 메모리 영역에서 0번째 주소부터 어느 영역까지는 커널이 차지하고 있다.
    • 프로세슨는 실제 메모리 영역에서 빈 공간 어느 위치에 존재하게 되는데,
    • 가상 메모리를 사용하여 0번째 주소를 사용하는 이유는 protection 관점에서 침입을 막기 위해서이다.
  • 또한 실제로 프로세스에게 할당되는 메모리는 굉장히 큰데, 실제로 동적 영역을 제외한 나머지 영역은 굉장히 적다.
    • 즉, 동적 영역이 대부분의 메모리를 사용한다는 뜻

프로세스 상태

  • 프로세스 상태는 운영체제마다 상태가 달라지지만 최소 5가지 정도의 상태가 있다.
    1. new
    • 아직 프로세스라고 부르지 못하는 단계
    • 사용자가 프로세스 실행을 요청했지만 아직 메모리에 올라가지 못한 단계
      • 프로세스의 실행코드가 카피가 덜 됐을 때
      • 메모리가 부족해서 프로세스를 못 올렸을 때
      • cpu가 너무 바빠서 아직 프로세스를 수행할 여유가 없을 때
    1. ready
    • new 상태에서 admit이 되면 running 상태로 변경
    • 메모리 영역에 프로세스가 완전히 올라와 있는 상태
    • 아직 cpu는 얻지 못한 상태
    1. running
    • cpu를 얻게 되면 running 상태로 변경
    • scheduler가 해당 프로세스를 cpu에 할당 했을 때 변경된다.
    • preemption(interrupt)을 당하면 다시 ready로 변경된다.
      • 선점
      • cpu를 뺐기게 되는 경우
    1. waiting
    • I/O나 sleep을 해야 하는 경우 cpu를 반납하고 waiting 상태로 변경된다.
    • I/O나 sleep이 끝날 경우 다시 ready 상태로 돌아간다.
    1. terminated
    • 완전히 메모리에서 제거 되기 전까지 terminated 상태가 된다.
    • 커널에서 제공하는 자료구조를 정리하고 해당 프로세스가 열어놓은 파일들을 닫는 과정을 수행한다.
  • 이러한 상태로 구분하는 경우는 각 상태에 맞는 이벤트가 발생했을 때 쉽게 대처하기 위함이다.
    • 예를 들어, cpu가 비게 되면 ready 상태에 있는 프로세스 하나를 꺼내서 cpu에 넣어야 한다.
    • 여러가지 이벤트에서 해당 상태의 구분은 도움이 된다.

Process Control Block(PCB)

  • 각 프로세스의 상태를 가지고 있는 자료구조이다.
  • task control block이라고 부르기도 한다.
  • 커널 안에 PCB라는 자료구조를 확보하여 존재하게 된다.
  • PCB가 가지고 있는 정보는 다음과 같다.
    • PID: 프로세스 아이디
    • PC: 현재 실행중인 위치 정보
    • Register: 내용을 저장할 레지스터
  • Context switching을 하기 위해 가장 많이 쓰인다.
    • 프로세스0이 수행중에 인터럽트가 발생하면, 현재 상태가 PCB에 저장되고 인터럽트 핸들러를 수행한다.
    • 그러고 나서 cpu가 프로세스0을 다시 재개할지, 블락 시킬지 결정한다.
    • 블락이 되면 그 다음 프로세스인 프로세스1을 꺼내서 실행하는데, PCB에서 프로세스1의 내용을 꺼내고 레지스터에 올려둔다.
    • 이렇게 함으로써 마치 프로세스0에서 프로세스1로 넘어간것 처럼 컨텍스트 스위치가 된다.
  • 이런 용도로 쓰기 위해 PCB가 존재하게 된다.
  • Context switching을 통해 멀티프로그래밍이 가능해졌다.
profile
긍정적으로 살고 싶은 개발자

0개의 댓글