Home [ostep] Virtualization: 프로세스 개념
Post
Cancel

[ostep] Virtualization: 프로세스 개념

Virtaulization: Processes

  • Process: 실행 중인 프로그램
    • 프로그램: 디스크 상에 존재, 실행을 위한 명령어와 정적 데이터의 묶음
    • 프로그램을 운영체제가 실행
  • 가상화
    • 시분할 기법: 원하는 수 만큼의 프로세스를 동시에 실행가능하게 함
      • CPU 공유, 각 프로세스의 성능은 낮아짐

공간분할(space sharing): 개체에게 공간을 분할, 디스크에서…

  • OS에서 CPU 가상화를 잘 구현하기 위해 필요한 것
    • 저수준 도구(메커니즘): 필요한 기능을 구현하는 방법이나 규칙
      • ex) context switch
  • 정책(policy)
    • 어떤 결정을 내리기 위한 알고리즘
      • ex) 스케줄링 정책

프로세스의 개념

  • Process: 실행 중인 프로그램의 개념
    • 특정 순간의 프로세스 표현: 실행되는 동안 접근했거나 영향을 받은 자원의 목록
  • 프로세스의 구성요소
    • 먼저 하드웨어 상태를 이해해야함
      • 프로그램이 실행되는 동안 HW 상태를 읽거나 갱신하기 때문
  • 중요한 HW 구성 요소 (프로세스를 구성하는 요소)
    • 메모리
      • 명령어, 데이터는 메모리에 저장
      • 프로세스가 접근할 수 있는 메모리
    • 레지스터
      • 명령어들이 레지스터를 직접 읽거나 갱신
    • 특별한 레지스터들
      • 프로그램 카운터(Program Counter, PC) 또는 명령어 포인터(instruction pointer, IP)
      • 스택 포인터(Stack Pointer), 프레임 포인터(Frame Pointer): 함수의 변수와 리턴 주소를 저장하는 스택을 관리할 때 사용하는 레지스터
    • 영구 저장장치(persistent storage)
      • 프로세스가 현재 열어 놓은 파일 목록을 가짐

팁: 정책과 구현의 분리(모듈성)…많은 OS에서 공통된 설계 패러다임: 고수준 정책을 저수준 기법으로부터 분리 기법: 시스템에 관한 어떻게? 정책: 어느것을? (어느 프로세스?) 기법과 정책을 분리하면 둘 중 하나를 변경할 때 기법의 변경을 고민하지 않아도 됨.

프로세스 API

  • 모든 현대 운영체제에서 제공되는 API

  • 생성(Create)
    • 새로운 프로세스 (명령어로, 더블클릭 …)
  • 제거(Destroy)
  • 대기(Wait)
  • 각종 제어(Miscellaneous Control)
    • 일시정지, 다시시작
  • 상태(Status)
    • 프로세스 상태 정보
      • 얼마동안 실행?, 어떤 상태?

프로세스 생성

  • 프로그램에서 프로세스로
    • 프로그램(디스크, [코드, 정적데이터]) –> 탑재 –> 메모리 [코드, 정적데이터, 힙, 스택]
      • 탑재: 디스크 상의 프로그램을 찾아 프로세스의 주소 공간으로 읽어들임
  • 첫 번째 작업
    • 코드, 정적 데이터(초기값을 가지는 변수)를 메모리, 프로세스의 주소 공간에 로드하는 것
      • 프로그램(SSD.. 실행 파일 포맷)
    • 초기 운영체제: 프로그램 실행 전 코드와 데이터 모두 메모리 로드
    • 현대 운영체제: 필요할 때 필요한 부분만 메모리에 탑재
      • 페이징(paging) 과 스와핑(swapping)
  • 두 번째 작업
    • 일정량 메모리가 프로그램의 런타임 스택 용도로 할당되어야함
    • C언어
      • C프로그램은 지역 변수, 함수 인자, 리턴 주소 등을 저장하기 위해 스택을 사용
      • main 함수의 인자인 argc, argv 벡터를 사용하여 스택을 초기화함
  • 운영체제는 프로그램의 힙(heap)을 위한 메모리 영역을 할당
    • 힙: 연결 리스트, 해시 테이블, 트리 등 크기가 가변적인 자료구조를 위해 사용
  • 운영체제는 입출력 관련 초기화 작업을 수행함
    • Unix 시스템에서 각 프로세스는 STDIN, STDOUT, STDERR 장치에 해당하는 3개의 파일 디스크립터를 가짐
      • 디스크립터 —–> 프로그램이 입력을 읽고, 출력하는 작업 가능 (영속성)
  • 요약
    • 코드, 정적데이터 메모리 탑재 -> 스택과 힙을 생성 및 초기화 -> 입출력 설정 -> 프로그램 실행 준비 끝
      • -> 프로그램 시작 지점(entry point) 시작하는 작업
      • -> OS는 CPU를 새로 생성된 프로세스에게 넘기고, 프로그램 실행

프로세스 상태

  • 프로세스의 상태(state)
    • 상태 전이
      • 실행(Running): 프로세스가 프로세서에서 실행 중 (명령어 실행 중)
      • 준비(Ready)
      • 대기(Blocked): 프로세스가 다른 사건을 기다리는 동안, 프로세스의 수행을 중단시키는 연산 (입출력 요청)
  • 프로세스는 상태를 OS의 정책에 따라 이동(스케줄링 정책)

  • 그 외 상태들(시스템에 따라 다름)
    • 초기 상태: 프로세스가 생성되는 동안
    • 최종 or 좀비 상태: 프로세스 종료 후 메모리에 남아 있는 상태

자료 구조

  • OS는 다양한 정보를 유지하기 위한 자료구조를 가지고 있음

  • 프로세스 리스트(process list)
    • 프로세스 상태를 파악하기 위해 준비 상태의 프로세스들을 위한 자료구조
  • 레지스터 문맥(register context)
    • 프로세스가 중단되었을 대 해당 프로세스의 레지스터값들을 저장함.
    • 이 레지스터값들을 복원하여 OS는 프로세스 실행을 재개함
    • 관련 기법: Context Switch

자료구조- 프로세스리스트: 시스템에서 실행 중인 프로그램을 관리한다. 프로세스 제어 블럭(PCB): 프로세스의 관리를 위한 정보를 저장하는 자료구조

핵심 질문

  • CPU가 여러 개 존재한다는 환상을 어떻게 제공하는가?
    • 가상화를 통해

요약

  • 프로세스
    • 실행중인 프로그램

숙제

todo

출처

ostep

ostep-virtualization-Processes

This post is licensed under CC BY 4.0 by the author.

[ostep] 운영체제 개요(Introduction)

[C++] emc++ 01: Type Deduction(auto 등)