가상화 과정

rokky·2023년 10월 14일
0

운영 체제

목록 보기
1/10
post-thumbnail

CPU를 많이 쓰는 듯한 착각을 어떻게 제공할까?

  • CPU 가상화
    - OS는 많은 CPU가 존재한다고 착각을 불러 이르킬 수 있다.
    - Time sharing : 한 프로세스를 수행하다가 멈추고 다른것을 수행시키는 것
    	- 이 잠재적인 비용을 performance라고 한다. 
    ex) 하나의 CPU가 program1을 10ms동안 실행시키고 멈춘 후 program2를 10ms동안 실행시키는 과정을 1초동안 반복한다. 이때 사람들이 보기에 CPU를 2개 쓰는 것처럼 느끼게 한다.(program1,2는 virtual CPU를 사용한다고 생각) 1초에 prog1은 50번 prog2는 50번 동작함

Process

  • cf) program vs process => program이 실행되면 프로세스가 실행되고 program에 있는 모든 코드를 실행한다.

  • process는 동작하는 프로그램이다.

  • process의 구성

    • Memory(주소 공간)
      • instruction
      • data 공간
    • Registers
      • 프로그램 카운터
      • 스택 포인터

Process API

  • 이런 API(Application Programming interfaces : 미리 만들어진 라이브러리 함수들)들은 모든 현대 OS에서 이용가능하다
    • create
      • 프로그램을 실행하기 위해 새로운 프로세스를 만든다.
    • Destroy
      • 다른 프로세스를 삭제한다.
    • wait
      • 프로세스 작동이 중지할때까지 기다린다.
    • Miscellaneous Control
      • 프로세스를 중지하고 재개 하는것
    • Status
      • 프로세스에 대한 몇몇 정보를 얻는 것

Process Creation

  1. 프로그램 코드를 프로세스의 메모리에 넣고, 주소 공간에 넣는다.

    • 프로그램은 처음에 실행가능한 형태로(.exe) disk에 존재한다.
    • OS는 loading 프로세스를 게으르게 수행한다.
      • 프로그램 수행동안 필요한 만큼의 코드와 데이터 만을 Loading한다.
  2. 프로그램의 run-time 스택이 할당된다.

    • stack은 local var, function param, return address가 저장된다.
    • 스택을 인수들로 초기화한다. -> main 함수의 argc, 배열 argv(main(int argc, char*argv[]))
  3. 프로그램의 heap이 생성된다.

    • 명백히 요청된 동적 할당 데이터에 대해 이용된다.
    • 프로그램은 이런 공간을 malloc()을 요청하면서 만들고, free()를 요청하며 비워준다.
  4. OS는 몇몇 다른 초기화 과정도 실행한다.

    • input/output(I/O) 셋업
      • 각 프로세스는 기본적으로 3개의 open file discripters를 가지고 있다.
      • Standard input, output, error
  5. 시작 지점인 main()이라는 공간에서 프로그램을 시작한다.

    • OS는 CPU의 control을 새로 생성된 프로세스로 넘긴다.

Process States

  • 프로세스는 3가지 상태중에 1가지 상태일 것이다.
    • Running
      • 프로세스는 프로세서(CPU)에서 수행중이다.
    • Ready
      • 프로세스는 수행할 준비가 되었지만 어떤 이유로 OS가 어떤 이유로 주어진 순간에 선택하지 않음
    • Blocked
      • 프로세스는 특정 종류의 작업을 수행했다.
      • 만일 프로세스가 I/O요청을 디스크에 수행한다면, 이것은 Blocked상태가 되고 몇가지 다른 프로세스들이 프로세서에서 이용될 수 있다.

Data structures

  • OS는 다양한 관련 정보를 추적하는 몇가지 핵심 데이터 구조체가 존재한다.
    • Process list
      • ready processes (프로세서 상태가 ready상태인)
      • blocked processes(프로세서 상태가 blocked 상태인)
    • 현재 running중인 프로세스
  • PCB(Process Control Block)
    • 각 프로세스에 대한 정보를 가지고 있는 C-구조
    • Register context
//ex) xv6 커널 Proc 구조

//register context
struct context{
	int eip;
    int esp;
    int ebx;
    int ecx;
    int edx;
    int esi;
    int edi;
    int ebp;
}; 

// 프로세스의 다양한 상태
enum proc_state{UNUSED, EMBRYO, SLEEPING, RUNNABLE, RUNNING, ZOMBIE};

// xv6가 각 프로세스를 어떨게 추적하는지
struct proc{ //PCB
	char *mem;
    uint sz;
    char *kstack;
    
    enum proc_state state; // 프로세스 상태
    int pid;
    struct proc *parent;
    void *chan;
    int killed;
    struct file *ofiled[NOFILE]
    struct inode *cwd;
    struct context contect;
    struct trapframe *tf;
    
} ;

0개의 댓글