[학교 수업]/[학교 수업] Operating System

Background 프로그램은 실행을 위해 메모리에 있어야하지만, 프로그램의 전체가 사용되는 경우는 드뭅니다. 예를 들어 error code, unusual routine, large data structure들은 자주 사용되지 않아 반드시 메모리에 항상 있어야하는 것은 아닙니다. 즉, 부분적으로 load된 프로그램을 상상해볼 수 있다는 뜻입니다. 각 프로그램이 실행중에 사용하는 memory의 양이 줄어들어, 더 많은 프로그램이 동시에 실행될 수 있으며, 이는 response time이나 turnaround time을 바꾸지 않으면서 CPU 활용률과 throughput을 증가시킵니다. 또한 swap out/in 할 때 transfer하는 양이 줄어들기 때문에 swap 하는데 필요한 I/O가 줄어들어 각 ..
Background 프로그램이 실행되려면 disk에서 memory로 가져와 프로세스 내에 배치되어야합니다. 또한 CPU는 main memory와 register에만 직접 접근할 수 있습니다. register접근은 매우 빠르지만, main memory접근은 여러 clock이 걸릴 수 있으며 이는 CPU를 stall시킵니다. 마지막으로 cache는 main memory와 CPU register 사이에 위치합니다. OS는 process의 memory공간을 할당해주며, 서로 다른 process끼리 서로의 공간을 침범하지 않도록 관리해야합니다. Base and Limit Registers base와 limit register는 logical address space를 정의합니다. CPU는 반드시 user mode..
System Model System은 많은 종류(예: CPU cycles, memory space, I/O devices)의 resource들을 가지고 있습니다. 그리고 각 resource들은 여러개의 instance를 보유할 수 있습니다. 각각의 process들은 이 resource를 request -> use -> release 순으로 이용합니다. Deadlock Characterization deadlock이 발생하기 위한 필요조건 4가지는 다음과 같습니다(이 4가지 상황이 벌어진다고 반드시 deadlock이 발생하는 것은 아닙니다):Mutual Exclusion: 오직 하나의 process만 하나의 자원을 이용할 수 있습니다.Hold and Wait: 어떤 process가 최소 하나의 resour..
Background 프로세스들은 기본적으로 동시에 실행될 수 있습니다. *이때 동시는 parallelization이 아닌 concurrently를 말합니다. 그러므로 각각의 프로세스들은 inturrupt를 당할 수 있고, 만약 shared data에 대해 여러 개의 프로세스들이 접근하려 한다면, data inconsistency problem이 발생할 수도 있습니다. 따라서 cooperating processes들 간의 실행 순서를 통제하는 것은 data consistency를 유지하는데 매우 중요한 요소입니다. 아래는 두 프로세스(Producer and Consumer)가 공유하는 자료구조와 데이터인 buffer와 counter 변수에 접근하여 값을 수정하는 경우에 대한 예시입니다: 이 경우 count..
Basic concepts CPU utilization을 최대화하기 위해서 multiprogramming은 필수적입니다. 이때 CPU의 cycle은 CPU burst와 I/O burst의 반복으로 이뤄집니다. *CPU burst에 의해 I/O burst가 일어나기에, CPU burst가 일반적으로 우선합니다(시간적으로). CPU Scheduler Short-term scheduler는 ready queue에 있는 process들 중 CPU에 할당할 process를 선택하는 역할을 맡습니다. 이때 CPU scheduler가 동작하는 경우는 아래의 4가지 경우입니다:Terminates; running 중인 process가 종료되는 경우Switches from running to waiting queueSw..
Motivation 현대의 응용 프로그램들은 대부분 multithreaded환경입니다. Process를 생성하거나 Process를 기준으로 context switch를 하면 Process자체가 너무 큰 단위이다보니 overhead가 발생합니다. 하지만 Thread의 생성이나 context switch는 이에 비해 가볍게 수행할 수 있어서 Thread가 중요해졌습니다. *kernel들은 일반적으로 multithreaded입니다. Multithreaded Server Architecture multithread환경을 이용한 서버 구조는 다양한 사용자의 요청들을 비동기적으로 처리할 수 있어 효율성이 올라갑니다: 만약 single-thread 환경이었다면, server는 request를 받아들인 후 client..
Creating a Separate Process via Windows API Process Termination 프로세스는 마지막 명령을 실행한 후, OS에 의해 내부적으로 exit() system call을 호출합니다. 이때 해당 프로세스의 부모 프로세스는 wait()을 통해 자식 프로세스의 상태 정보를 얻을 수 있습니다. 그리고 OS는 해당 프로세스의 자원을 deallocation합니다. 부모 프로세스는 다음과 같은 이유로 자식 프로세스의 실행을 종료시킬 수 있습니다:Child has exceeded allocated resources; 자식 프로세스가 자원 할당량을 초과한 경우Task assigned to child is no longer required; 더 이상 자식 프로세스가 필요하지 않은 ..
Chapter 2. Implementation OS는 구현 방법이 다양합니다. (1) 초기 OS는 어셈블리어로 구성되었으며, (2) system programming language로는 Algol이나 PL/1과 같은 언어를 사용했었습니다. (3) 현재는 대부분 C, C++로 이루어져있습니다. 사실 OS는 기능이 다양하기 때문에 다양한 언어들로 구현됩니다. 가장 낮은 수준은 어셈블리로, 주로 C언어로 구성되며, PERL, Python, shell script같은 scripting language들을 사용하기도 합니다. 높은 수준의 언어를 사용할 수록 다른 하드웨어와의 이식성이 올라가지만 속도가 느려지는 단점이 있습니다. 또한 Emulation을 이용해서 OS가 그에 맞지 않는 하드웨어 위에서도 동작하도록 ..