
1. 배경 메인 메모리는 현대 컴퓨터 시스템의 운영에 중심적인 역할을 한다. 메모리는 각각 주소가 할당된 일련의 바이트들로 구성된다. CPU는 PC(program counter)가 지시하는 대로 메모리로부터 다음 수행할 명령어를 가져오는데 그 명령어는 필요한 경우 추거적인 데이터를 더 가져올 수 있으며 반대로 데이터를 메모리로 내보낼 수도 있다. 메모리는 주소에 지시한 대로 읽기 쓰기만 할 뿐 이 주소들이 어떻게 생성되었는지 혹은 그 주소가 가리키는 내용이 무엇인지를 모른다. 따라서 주소가 프로그램에 의해서 어떻게 생성되었는지에 대한 세부 사항은 이 시점에서의 고려 대상이 아니다. 여기서는 프로그램에 의해서 생성되는 일련의 주소만 언급하기로 한다.1.1 기본 하드웨어메인 메모리와 각 처리 코어에 내장된..

1. 고전적인 동기화 문제들1.1 유한 버퍼 문제우리가 해결하려는 문제에서 소비자와 생산자는 다음과 같은 자료구조를 공유한다.int n;semaphore mutex = 1;semaphore empty = n;semaphore full = 0;우리는 n개의 버퍼로 구성된 풀이 있으며 각 버퍼는 한 항목(item)을 저장할 수 있다고 가정한다. mutex 이진 세마포는 버퍼 풀에 접근하기 위한 상호 배제 기능을 제공하며 1로 초기화된다. empty와 full 세마포들은 각각 비어 있는 버퍼의 수와 꽉 찬 버퍼의 수를 기록한다. 세마포 empty는 n값으로 초기화되고, 세마포 full은 0으로 초기화 된다. 다음은 생산자 코드이다.while(true) { wait(empty); //버퍼가 가득 찬 경우 bl..

협력적 프로세스는 시스템 내에서 실행 중인 다른 프로세스의 실행에 영향을 주거나 영향을 받는 프로세스이다. 협력적 프로세스는 논리 주소 공간(즉, 코드 및 데이터)을 직접 공유하거나 공유 메모리 또는 메시지 전달을 통해서만 데이터를 공유할 수있다.그러나 공유 데이터를 동시에 접근하면 데이터의 일관성을 망칠 수 있다. 데이터의 일관성을 유지하는 다양한 메커니즘을 알아보자1. 배경우리는 이미 프로세스가 병행하게 또는 병렬로 실행될 수 있다는 것을 알고 있다. CPU 스케줄러가 프로세스 사이에서 빠르게 오가며 각 프로세스를 실행하여 모든 프로세스를 병행 실행시킨다는 것을 배웠다. 이는 한 프로세스는 다른 프로세스가 스케줄되기 전에 일부분만 진행할 수 있다는 것을 의미한다. 사실 프로세스는 명령어가 실행될 때 ..

최신 운영체제에서는 실질적으로는 프로세스가 아니라 커널 수준 스레드를 스케줄 한다. 그러나 프로세스 스케줄링과 스레드 스케줄링 용어는 상호 교환적으로 사용된다. 1. 기본 개념 코어가 하나인 시스템에서는 한순간에 오직 하나의 프로세스만이 실행될 수 있다. 나머지 프로세스는 CPU의 코어가 가용 상태가 되어 다시 스케줄 될 수 있을 때까지 기다려야 한다. 1.1 CPU I/O Burst Cycle 프로세스 실행은 CPU 실행과 I/O 대기의 사이클로 구성된다. 프로세스들은 이 두 상태 사이를 교댜로 왔다 갔다 한다.프로세스 실행은 CPU burst로 시작된다 뒤이어 I/O burst가 발생하고, 그 뒤를 이어 또 다른 CPU burst가 발생하며 이어 또 다른 I/O burst 등등으로 진행된다. 결국..

프로세스는 운영체제가 메모리 등의 필요한 자원을 할당해준 실행중인 프로그램이다.프로그램을 실행하면 운영체제로부터 실행에 필요한 자원을 할당받아 프로세스가 되는것이다. 프로세스의 문맥(context)특정 시점에 어디까지 수행했는지에 관한것 크게 3가지로 분류한다.1. 하드웨어 문맥CPU 수행 상태를 나타내는 것으로 PC와 각종 레지스터에 저장하고 있는 값들을 말한다.2. 프로세스의 주소공간코드, 데이터, 스택으로 구성된 프로세스만의 독자적인 주소 공간을 말한다.3. 커널상의 문맥프로세스를 관리를 위한 자료구조인 PCB와 Kernel stack을 말한다.커널 스택을 왜 프로세스마다 별도로 두고 있을까?커널은 하나인데 여러 프로세스가 요청해서 커널 코드를 여러 프로세스 요청으로 실행될 수 있다.커널 스택을 프..

Process란? 프로세스란 실행중에 있는 프로그램을 의미한다. 프로세스는 운영체제에 의해 관리되며, 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 운영체제는 프로세스들에게 적절히 자원들을 할당하여 여러가지 작업을 수행할 수 있게 한다. 특징 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. Thread 프로세스의 한계 프로세스만 존재하면 어떤일이 발생할까? 프로세스만 존재한다는 말은 다른 말로 한다면 한번에 하나의 작업을 할 수 있다는 뜻이다. 같은 프로세스를 여러개 만들수도 있겠지만 프로세스는 앞에서 말했다 싶이 독립적으로 실행되고 자원을 할당 받을 수 있는 단위이다. 즉 같은 프로세스라도 서로 공유하는 부분없이 독립적으로 자원을 ..

동기식 I/O어떤 프로그램이 I/O 요청 후 입출력 작업이 완료된 후에야 CPU 제어권이 사용자 프로그램으로 넘어가는 것을 말한다. 즉, 입출력 요청 후 입출력 작업이 완료되기 전에는 CPU 제어권이 없다는 뜻이된다. 이말은 실행이 안된다는 것이다. 동기식 I/O의 구현 방식은 두가지로 나뉜다.구현 방법 1I/O가 끝날 때까지 CPU를 낭비시킴 매시점 하나의 I/O만 일어날 수 있음 구현 방법2 보통 이방법 사용I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗음I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움 다른 프로그램에게 CPU를 줌 보통은 구현 방법2를 사용하는게 일반적이다. 비동기식 I/O어떤 프로그램이 I/O 요청을 한 후 입출력 작업이 끝나기를 기다리지 않고 CPU 제어권이 사용자..

커널(Kernel)이란 운영체제의 가장 핵심 기능은 자원의 관리, 즉 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 장치 관리 등이라고 배웠다. 그 외에도 다른 컴퓨터와의 통신을 위한 네트워킹, 외부 침입으로부터 컴퓨터 시스템을 지키게 하는 보호 기능 등도 중요한 핵심 기능이다. 이와 같은 핵심 기능들을 우리는 운영체제 커널 kernel 이라고 부른다. 커널의 영어 사전적 의미는 요점, 핵심이다. 운영체제 커널을 다른 말로는 뉴클리우스 nucleus 라고도 부른다.쉘커널 외에도 운영체제에서 중요한 역할을 하는 것은 쉘 shell 이다. 쉘의 영어 사전적 의미는 껍질 또는 외피이다.어떤 프로그램을 실행하려면 해당 아이콘을 더블 클릭하면 되고, 파일을 삭제하려면 그 파일을 드래그 하여 휴지통에 넣..