Midterm summary

Midterm summary

Memory virtualization

 

시스템의 안정성: Availability

  • MTTF(Mean Time To Failure)
  • MTTR(Meat Time To Repair)

 

Performance의 요소:

  • Latency
  • Throughput
  • Fairness
  • Overhead
  • Predictability (위의 4요소가 언제 프로그램을 실행해도 예측가능한 범위 안에 있어야 한다.

 

Multi-processing: 여러개의 process가 하나의 작업을 병렬처리하는 것

Multi-threading: 여러개의 thread가 하나의 작업을 병렬처리하는 것

Multi-programming: CPU를 효율적으로 사용하기 위하여 하나의 작업이 대기하는 동안 다른 작업을 실행하는 것. 예를 들면 한 process가 IO를 기다리는 동안 다른 process를 실행할 수 있다.

Multi-tasking: Multi-programming에서 더욱 나아가 여러 프로그램을 번갈아가며 실행하여 마치 여러 프로그램이 동시에 실행되는 것 처럼 보이게 만드는 것.

 

Dual mode: A process can be executed in kernel mode or user mode

User->Kernel Mode switch
Case Description
Interrupt Asynchronous, Triggered by H/W
Trap Synchronous, Triggered by S/W
System call Kernel에 기능을 요청한다.
Fault 복구 가능한 에러들. ex) seg. fault, page fault. 핸들러를 통해서 처리되면 다시 현재의 명령어로 돌아갈 수 있다.
Abort 복구 불가능한 에러들. signal을 보내어 프로세스를 종료시켜서 처리한다.
Kernel->User mode switch
Case Description
Return from U->K mode switch Resume the suspended process
Process/thread context switch Resume some other process
User-level upcall Note to user program

 

Foreground/Background

  • foreground process: shell을 통해 사용자와 stdin/stdout으로 interactive하게 동작한다.
  • background process: 사용자와의 interaction이 없다.

 

pthread_yield: 자기 자신을 ready queue에 집어넣고, ready queue로부터 다른 thread를 골라 실행시킨다.

 

Linux kernel에서 process / thread의 data structure

Figure 4.15: A multi-threaded kernel with 3 kernel threads and 2 user-level processes, each with 2 threads.

Figure 4.15: A multi-threaded kernel with 3 kernel threads and 2 user-level processes, each with 2 threads.

Processor 하나당 하나의 kernel thread가 있다. Kernel thread의 stack은 user-level thread의 stack이 하는 일들에 더불어 U->K mode switch때 user CPU state를 저장하는 역할 또한 한다.

 

Entering trap: Atomic mode transfer

  1. Switch to kernel stack; put SP, PC, PSW on stack
  2. Switch to kernel mode

Entering interrupt handler

  1. Vector through interrupt table
  2. Interrupt handler saves registers it might clobber

 

How to start a process

  1. Allocate a PCB in kernel
  2. Allocate memory for process (code, heap, stack, data)
  3. Load program to memory
    1. Read header
    2. Copy code to code area (we’ll optimize this later)
    3. Initialize globals
  4. Copy arguments to program onto process stack
  5. Initialize registers in PCB (initial values for stack pointer, program counter, others?)
  6. Start process by “returning” to it
    1. Initialize kernel exception stack as if initial register values saved on it; then iret

 

Unix Process Control

Unix Process Control

 

SIGKILL과 SIGSTOP은 handling할 수 없다.

 

sighandler_t signal(int iSig, sighandler_t pfHandler);

 

UNIX I/O의 특징

  • Uniformity: 모든 file operation이 open, close, read, write를 사용한다.
  • Open before use
  • Byte-oriented
  • Kernel-buffered read/write
  • Explicit close

 

MTAO: Multiplt Thing At Once

 

Thread: A thread is a single execution sequence that represents a separately schedulable task

 

Thread creation

 

Thread yield

 

Separation of Mechanism from Policy

  • Context switch (M.) vs. scheduling (P.)
  • File metadata (M.) vs. disk block placement (P.)
  • Page translation (M.) vs. page replacement (P.)

 

Up-call: lower layer에서 higher layer의 function을 호출하는 것

 

Too much milk examples

 

Hansen vs Hoare semantics

  • Hansen: Signal로 wait하던 애를 Ready queue에 넣기만 한다. scheduling은 OS의 몫
  • Hoare: Signal로 wait하던 애를 깨운 다음 바로 걔한테 CPU를 준다.

 

Semaphore의 value는 현재 가용한 자원의 양이다. Negative value가 될 수 없다.

 

Implementing condition variables using semaphores

 

 

 

Conditions for Deadlock

  • Bounded resources
  • No preemption
  • Wait while holding: 다른 resource를 acquire하려고 기다리는 동안 가진 resource를 놓지 않는다.
  • Circular waiting

 

Banker’s algorithm

Banker's algorithm

 

Compiler’s reordering때문에 conditional variable을 쓸때는 while문으로 계속 조건을 체크해야한다.

 

I/O event triggers a thread with a higher priority ( write를 부르면 priority가 높아진다?)

Hansen / Hoare 왜 FIFO implementation에서 달라지나??

 

 

 

Leave a Reply