[ OSTEP ] 프로세스의 개념

Minsu._.Lighting·2024년 3월 13일
0

[ OSTEP ] 정리 모음집
" OS공부를 위한, 램지 H. 아파시 뒤소의 OSTEP 을 읽고 내용 요약 / 정리 "

💡 핵심

" 프로세스는 간단히 말하면 실행 중인 프로그램! "
프로세스 구현에 필요한 기법, 구현한 프로세스를 스케줄링하는 정책 등을 알아보고, 여러 방법들을 조합하여 운영체제가 CPU를 가상화하는 방식을 이해하자.


💡 프로세스의 개념

📌 프로그램

  • 실행을 위한 명령어와정적 데이터의 묶음
    - 이 명령어와 데이터 묶음을 읽고 실행하여 프로그램에 생명을 불어넣는 것이 운영체제

  • 디스크 상에 존재

📌 프로세스

  • 운영체제가 제공하는 실행 중인 프로그램

📌 CPU의 가상화

  • CPU는 가상화를 통해 CPU가 여러개 있는 듯한 동작을 제공한다
    - 음악 플레이어를 실행해 노래를 들으며 웹 서핑을 즐기는 등...
    - 실제로 CPU는 한 프로세스만 실행시키지만, 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행하는 작업을 반복하면서 CPU가 여러 개 존재하는 듯한 동작을 한다
    - 해당 기법을 시분할(Time Sharing) 이라고 한다.

📢 현대 모든 운영체제들은 시분할 기법 중 문맥 교환(Context Switch)을 사용 한다!

📌 스케줄링 정책

📢 CPU의 가상화를 통해 여러 프로그램을 실행할 수 있게되었는데...
많은 프로그램 중 어떤 프로그램을 먼저 실행되고, 다음에는 어떤 프로그램을 실행되는거지..?

  • 운영체제 중 스케줄링 정책(Scheduling Policy)에 의해 결정
    - 과거정보, 워크로드에 관한 지식, 성능 측정 결과 등을 토대로 결정된다
    - 정책(Policy) : 운영체제의 지능, 운영체제 내에서 어떤 결정을 내리기 위한 알고리즘
  • 과거 정보
    - 예) 직전 1분 동안 어떤 프로그램이 자주 실행 되었는지

  • 워크로드에 관한 지식
    - 예) 어떤 유형의 프로그램들이 실행되었는지

  • 성능 측정 결과
    - 예) 시스템이 대화 성능 혹은 처리량을 높이려 하는지

📌 하드웨어 상태

  • 프로그램이 실행되는 동안 하드웨어 상태를 읽거나 갱신할 수 있다

[ 하드웨어 상태(Machine State) 구성 요소 ]

  • 메모리
    - 명령어, 실행 프로그램이 읽고 쓰는 데이터가 저장되는 영역
    - 프로세스가 접근할 수 있는 메모리는 프로세스를 구성하는 요소
  • 레지스터
    - 많은 명령어가 레지스터를 직접 읽거나 갱신 함
    - 프로세스를 실행하는 데 레지스터도 사용

[ 하드웨어 상태를 구성하는 특별한 레지스터 ]

  • 프로그램 카운터(Program Counter, PC)
    - 프로그램의 어느 명령어가 실행 중인지 알려주는 레지스터

  • 스택 포인터(Stack Pointer) & 프레임 포인터(Frame Pointer)
    - 함수의 변수와 리턴 주소를 저장하는 스택을 관리할 때 사용하는 레지스터

  • 영구 저장장치(Persistent stroage)
    - 프로세스가 현재 열어 놓은 파일 목록을 가진 입/출력 정보

💡 프로세스 API

📌 운영체제가 반드시 제공해야 하는 기본 기능의 API

  • 생성(Create)
    - 새로운 프로세스를 생성할 수 있는 방법
    - ex) 쉘에 명령어 입력, 프로그램 아이콘을 더블 클릭하여 프로그램 실행 등

  • 제거(Destroy)
    - 프로세스를 강제로 제거할 수 있는 방법
    - 대부분의 프로세스는 실행되고 할 일을 다하면 스스로 종료하지만, 그러지 못한 프로세스는 사용자가 제거하길 원할 것, 필요없는 프로세스를 중단시키는 API는 매우 유용함

  • 대기(Wait)
    - 어떤 프로세스의 실행 중지를 기다릴 필요가 있기 때문

  • 각종 제어(Miscellaneous Control)
    - 프로세스 제거, 대기 외 여러가지 기능들
    - ex) 프로세스 일시정지 / 재개 등

  • 상태(Status)
    - 프로세스가 얼마 동안 실행되었는지, 어떤 상태에 있는지 등이 포함된 프로세스 상태 정보를 얻는 기능


💡 프로세스 생성 과정

  • 운영체제가 프로그램 코드와 정적 데이터를 프로세스의 주소 공간에 탑재
    - 초기 운영체제들은 코드와 데이터를 모두 메모리에 탑재했지만 현대 운영체제는 코드나 데이터를 필요할 때 필요한 부분만 메모리에 탑재한다
    - [ 가상 메모리 / 페이징, 스와핑 기법 ] 참조

  • 운영체제가 프로그램의 실행시간 스택 용도로 일정량의 메모리 할당
    - 지역 변수, 함수 인자, 리턴 주소 등을 저장하기 위한 스택 영역

  • 운영체제가 프로그램의 힙을 위한 메모리 영역 할당
    - 동적 할당 데이터를 위한 힙 영역

  • 운영체제가 입출력과 관계된 초기화 작업 수행

  • 운영체제가 CPU를 새로 생성된 프로세스에게 넘기게 되면 프로그램이 실행된다!


💡 프로세스 상태

  • 프로세스 상태의 개념은 초기 컴퓨터 시스템에서 등장
  • 프로레스 상태를 단순화 하면 실행, 준비, 대기 상태 중 하나로 존재함
  • 프로세스는 운영체제의 스케줄링 정책에 따라 각 상태로 전이함

📌 실행(Running)

  • 명령어를 실행중인 프로세스

📌 준비(Ready)

  • 명령어를 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중인 프로세스

📌 대기(Blocked)

  • 프로세스가 다른 명령을 기다리는 동안 프로세스의 수행을 중단시키는 연산
    - ex) 프로세스가 디스크에 대한 입출력 요청 시 프로세스는 입출력이 완료될 때까지 대기 상태로 변하고 다른 프로세스가 실행 상태가 될 수 있음

💡 운영체제의 자료 구조

  • 운영체제도 일종의 프로그램으로 다른 프로그램들과 같이 다양한 정보를 유지하기 위한 자료 구조를 가지고 있다

  • 프로세스 리스트
    - 운영체제가 가진 자료 구조 중 하나
    - 프로세스 상태를 파악하기 위해 준비 상태의 프로세스들을 위한 자료 구조

  • 운영체제가 프로세스를 추적하기 위해 필요로 하는 정보들
    - [ 참고 사진 / xv6 Proc 구조 ] : 대부분의 운영체제들도 이와 비슷한 프로세스 구조를 갖고 있음

profile
오코완~😤😤

0개의 댓글

관련 채용 정보