Limited Direct execution

가상화 기법을 구현하기 위해서는 아래와 같은 문제를 해결해야 한다.

  1. 성능저하 : 시스템에 과중한 오버헤드를 주지 않으면서 가상화를 구현해야 한다.
  2. 제어 문제 : CPU에 대한 통제를 유지하면서 프로세스를 효율적으로 실행해야 한다.

 

Problem 1 : Restricted Operation

Direct execution은 빠르게 실행된다는 장점이 있지만 프로세스가 특수한 종류의 연산(I/O 입출력, 자원 독점)을 수행하길 원한다면 문제가 발생할 수 있다.

 

따라서 User modeKernel mode를 사용한다.

  • User mode
    • User mode에서 실행되는 코드는 할 수 있는 일이 제한된다.
    • ex) 입출력 요청을 할 수 없도록 설정한 후 프로세스가 입출력 요청을 하면 프로세서가 예외를 발생시키고, 운영체제는 해당 프로세스를 제거한다.
    • 제한 작업의 실행을 허용하기 위하여 system call이 제공된다.
  • Kernel mode
    • 모든 특수한 명령어를 포함하여 원하는 모든 작업을 수행할 수 있다.

 

System Call

  1. trap
    1. 프로그램은 system call을 실행하기 위해 trap 명령어를 실행해야 한다.
    2. 커널 안으로 분기하는 동시에 특권 수준을 Kernel mode로 상향 조절한다.
    3. Kernel mode로 진입한 후 운영체제는 모든 명령어를 실행할 수 있고 이를 통하여 프로세스가 요청한 작업을 처리할 수 있다.
      • trap은 운영체제 코드의 어디를 실행할 지 알 수 없다. 호출한 프로세서는 분기할 주소를 명시할 수 없기 때문이다. (주소를 명시한다는 것은 커널 내부의 원하는 지점을 접근할 수 있다는 의미이므로 위험하다.)
      • 따라서 커널은 부팅 시에 trap table을 만들고 하드웨어에게 trap handler의 위치를 알려준다.
  2. return-from-trap
    1. 프로세스가 요청한 작업을 처리하면 운영체제는 return-from-trap 특수 명령어를 호출한다.
    2. 특권 수준을 User mode로 하향 조정하면서 호출한 사용자 프로그램으로 리턴한다.

 

 

 

.............................................

 

Problem 2 : Switching Between Processes

cooperative & non-cooperative

  • Cooperative
    • 프로세스가 CPU를 자발적으로 양보한다.
    • 비정상적인 행위(0으로 나누기, 접근할 수 없는 메모리에 접근)를 하면 운영체제에게 제어가 넘어간다. 
    • 만약 프로세스가 무한 루프에 빠져 시스템 콜을 호출할 수 없을 때에는 재부팅밖에 방법이 없다.
  • Non-Cooperative : OS Takes Control
    • timer interrupt를 이용한다.

 

Saving and Restoring Context 

두 번의 레지스터 저장/복원이 발생한다.

첫 번째는 타이머 인터럽트가 발생했을 때 일어난다. 실행 중인 프로세스의 사용자 레지스터가 하드웨어에 의해 암묵적으로 저장되고 저장 장소로 해당 프로세스의 커널 스택이 사용된다.

두 번째는 운영체제가 A에서 B로 전환하기로 결정했을 때 일어난다. 커널 레지스터는 운영체제에 의하여 해당 프로세스의 프로세스 구조체에 저장된다.

 

 

Worried About Concurrency?

system call을 처리하는 도중에 타이머 인터럽트가 발생한다면?

하나의 인터럽트를 처리하고 있을 때 다른 인터럽트가 발생한다면?

 

=> Lock 기법을 이용한 방법을 뒷 장에서 배운다. 

 

 

 


광운대학교 김태석 교수님 운영체제 수업과

[운영체제 : 아주 쉬운 세 가지 이야기] 책 참고

'21-2학기 > 운영체제' 카테고리의 다른 글

[Virtualizaton] 3. Process API  (0) 2022.01.04
[Virtualizaton] 2. Processes  (0) 2022.01.04

Process Creation

Parent process는 child process를 만든다. 이 형태는 tree 모양을 가지게 된다.

 

Child process의 resources, Execution, Address space은 다음과 같다.

  • Resource
    • OS gives
    • Pareent share
      1. all
      2. subset
      3. no
  • Execution
    • concurrently
    • Parent waits until child terminate
  • Address space
    • Child duplicates parent
    • Child has a new program loaded into it.

 

 

프로세스 생성은 다음과 같은 과정을 포함한다.

  • Create PCB within OS kernel
  • Allocate memory space
  • Load Binary program
  • Initialize the program

 

UNIX에서는 Process Creation을 위해 fork와 execve system call을 제공한다.

 

 

Process Termination

  • exit (정상 종료)
  • abort (강제 종료)

 

Process Creation & Termination

 

 

Process API

1. fork()

2. wait()

3. exec()

 

 


광운대학교 김태석 교수님 운영체제 수업과

[운영체제 : 아주 쉬운 세 가지 이야기] 책 참고

'21-2학기 > 운영체제' 카테고리의 다른 글

[Virtualizaton] 4. Limited Direct execution  (0) 2022.01.04
[Virtualizaton] 2. Processes  (0) 2022.01.04

Virtualization이란

시스템에 존재하는 하나의 자원을 각 프로그램에게 여러 개의 자원처럼 보이게 하는 것이다.

각 프로그램은 하나의 자원을 공유하고 있지만 각자의 자원이 있다는 환상을 갖게 된다.

Processes

프로세스의 개념

프로세스는 실행 중인 프로그램으로 정의한다. 프로그램은 디스크 상에 존재하며 실행을 위한 명령어와 정적 데이터의 묶음을 말한다.

사용자는 하나 이상의 프로그램을 동시에 실행시키기를 원하므로 운영체제는 적은 개수의 CPU 밖에 없더라도, 무한개에 가까운 CPU가 존재한다는 환상을 제공해야한다.

이러한 환상은 가상화를 통해 만들어진다. CPU 가상화는 저수준의 도구인 메커니즘과 고차원적인 지능인 정책으로 구성된다.

모든 현대 운영체제들은 시분할(time sharing) 기법을 사용해 가상화를 만들어낸다.

프로세스의 구성 요소를 이해하기 위해서는 하드웨어 상태(machine state)를 이해해야 한다.

메모리(Address space)와 레지스터는 프로세스의 하드웨어 상태에 포함된다.

메모리는 Code(Text), Data, Stack, Heap 으로 구성되어 있고 레지스터는 Program Counter, Stack Pointer 등으로 구성되어 있다.

프로세스 API

운영체제가 반드시 API로 제공해야 하는 기능은 다음과 같다.

  • 생성(Create) : 운영체제는 새로운 프로세스를 생성할 수 있는 방법을 제공해야 한다. 쉘에 명령어를 입력하거나, 응용 프로그램의 아이콘을 더블-클릭하여 프로그램을 실행시키면, 운영체제는 새로운 프로세스를 생성한다.
  • 제거(Destroy) : 프로세스 생성 인터페이스를 제공하는 것처럼 운영체제는 프로세스 를 박제로 제거할 수 있는 인터페이스를 제공해야 한다. 물론, 많은 프로세스는 실행되고 할 일을 다하면 스스로 종료한다. 그러나 프로세스가 스스로 종료하지 않으면 사용자는 그 프로세스를 제거하길 원할 것이고, 필요ᨧ는 프로세스를 중단시키는 API는 매우 유용하다.
  • 대기(Wait) : 때론 어떤 프로세스의 실행 중지를 기다릴 필요가 있기 때문에 여러 종류의 대기 인터페이스가 제공된다.
  • 각종 제어(Miscellaneous Control) : 프로세스의 제거, 대기 이외에, 여러 가지 제어 기능들이 제공된다. 예를 들어, 대부분의 운영체제는 프로세스를 일시정지하거나 재발 (일시정지되ᨩ던 프로세스의 실행을 다시 시작)하는 기능을 제공한다.
  • 상태(Status) : 프로세스 상태 정보를 얻어내는
  • 인터페이스도 제공된다. 상태 정보에는 얼마 동안 실행되ᨩ는지 또는 프로세스가 어떤 상태에 있는지 등이 포함된다.

프로세스 생성 : 좀 더 자세하게

1. Load a program code into memory, into the address space of the process. ( 메모리에 코드 적재 )

  • 프로그램은 디스크 또는 SSD에 실행 파일 형식으로 저장되어 있다. 코드와 정적 데이터를 메모리에 탑재하기 위해서 운영체제는 디스크의 해당 바이트를 읽어서 메모리에 저장한다. 

2. The program's run-time stack is allocated.

  • 일정량의 메모리를 run-time stack 용도로 할당시킨다.
  • main() 함수의 인자인 argc와 argv 벡터를 사용하여 스택을 초기화한다.

3. The program;s heap is created.

  • free(), malloc()

4. The OS do some other initialization tasks.

  • 입출력과 관계된 초기화 작업 수행 (ex. 표준 입력 STDIN, 표준 출력 STDOUT, 표준 에러 STDERR 장치에 해당하는 세 개의 파일 디스크립터)

5. Start the program running at the entry point, namely main().

 

 

프로세스 상태

  • 실행 (Running): 실행 상태에서 프로세스는 프로세서에서 실행 중이다. 즉, 프로세 스는 명령어를 실행하고 있다.
  • 준비 (Ready): 준비 상태에서 프로세스는 실행할 준비가 되어 있지만 운영체제가 다른 프로세스를 실행하고 있는 등의 이유로 대기 중이다.
  • 대기 (Blocked): 프로세스가 다른 사건을 기다리는 동안 프로세스의 수행을 중단시 키는 연산이다. 흔한 예 : 프로세스가 디스크에 대한 입출력 요청을 하였을 때 프로세스는 입출력이 완료될 때까지 대기 상태가 되고, 다른 프로세스가 실행 상태로 될 수 있다.
  • + 최종(final)/좀비(zombie) : 프로세스는 종료되었지만 메모리에 남아있다.

 

 

자료 구조

운영체제도 일종의 프로그램이므로 다양한 정보를 유지하기 위한 자료 구조를 가지고 있다.

 

  • PCB (Process Control Block) : 각 프로세스의 정보를 담고 있는 자료구조

 

 

 


광운대학교 김태석 교수님 운영체제 수업과

[운영체제 : 아주 쉬운 세 가지 이야기] 책 참고

 

'21-2학기 > 운영체제' 카테고리의 다른 글

[Virtualizaton] 4. Limited Direct execution  (0) 2022.01.04
[Virtualizaton] 3. Process API  (0) 2022.01.04

+ Recent posts