전공공부/운영체제 (Operating System) 22

[운영체제] File System Implementation

파일 시스템은 디스크로의 효율적이고 편리한 접근을 제공합니다. 하지만 이 파일 시스템을 설계함에 있어서는 2가지 고려해야 할 사항이 존재합니다. 첫 번째는 파일 시스템이 사용자에게 어떻게 보여야 할지 정의하는 것입니다. 다시 말해, 파일의 이름이나 id와 같은 속성, 파일에 허용된 연산, 디렉터리 구조 등을 정의하는 것입니다. 두 번째는 파일들을 실제 저장 장치인 디스크에 어떻게 저장하느냐 하는 것입니다. 즉 디스크의 어떤 블록에 해당 파일을 저장할지를 결정해주는 것입니다. 이 글에서는 이 두 번째 문제에 집중하여 파일 시스템의 구현을 다뤄볼까 합니다. 1. 파일 시스템 자료 구조 (Data Structure for File System) 우선 디스크에서 블록이 무엇인지부터 살펴보겠습니다. 블록(bloc..

[운영체제] File System Interface

운영체제에서 마지막으로 다뤄볼 챕터는 바로 파일 시스템으로, 두 번의 글에 나누어 Interface와 Implementation에 대해 공부해보고자 합니다. 파일 시스템이란 사실상 메모리의 관리에 관한 내용이며, 운영체제 중에서 사용자에게 가장 많이 노출되는 부분입니다. 한 번 시작해보도록 하겠습니다. 1. 파일과 디렉터리 (File & Directory) 컴퓨터는 정보를 어떤 저장 매체에 저장할 수 있으며, 파일이란 이 정보를 담는 논리적인 단위로 생각할 수 있습니다. 사용자의 관점에서 보면, 파일은 이름이 붙여져 있고, 시스템이 재부팅되어도 사라지지 않는 데이터들의 집합으로 생각할 수 있고, 운영체제의 입장에서 보면 데이터를 저장하고 있는 디스크 블록들의 집합체로 볼 수 있습니다. 어떠한 자료이든, ..

[운영체제] Virtual Memory (2) - Page Replacement Algorithm

페이지 교체 알고리즘에는 여러 가지가 존재합니다. 이 중에 어떤 알고리즘을 사용하느냐에 따라 실행시간에 큰 영향을 미칠 수 있으니 최대한 좋은 알고리즘을 선택하는 것이 중요합니다. 1. FIFO (First in, First out) 가장 간단한 페이지 교체 알고리즘은 FIFO입니다. 말 그대로 메모리에 올라온 지가 가장 오래된 페이지를 내쫓는 알고리즘이죠. 페이지가 올라온 시간을 페이지마다 기록해도 되고, 페이지들이 올라온 순서대로 큐를 만들어서 관리해도 됩니다. 구현도 쉽고, 이해도 쉽지만, 자주 사용하는 페이지들이 올라온 지 오래되었다는 이유만으로 디스크로 돌아간 뒤 금방 다시 올라와야 하는 상황을 생각해보면 확실히 최적화된 모습의 알고리즘은 아닐 것입니다. 2. Optimal Page Replac..

[운영체제] Virtual Memory (1) - Demand Paging, Page Replacement

지난 글에서까지 메모리 관리에 대한 공부를 해보았습니다. 메모리 관리의 핵심은 다중 프로그래밍을 실현하기 위해 메모리에 많은 프로세스들을 동시에 유지할 수 있도록 하는 것입니다. 하지만 메인 메모리를 공부하면서 공부했던 방식은 모두 프로세스가 실행되기 위해 메모리로 올라와야 한다는 것을 전제로 합니다. 하지만 가상 메모리(Virtual Memory)를 사용하면 프로세스 전체가 다 메모리로 올라오지 않아도 실행이 가능합니다. 1. 가상메모리? 가상 메모리를 이용하면 프로그램이 실제 물리 메모리보다 큰 메모리 공간을 요구하더라도 사용이 가능하다는 장점이 있습니다. 가상 메모리는 물리 메모리로부터 사용자 관점의 논리 메모리를 분리시켜 메인 메모리를 균일한 크기의 저장 공간으로 구성된 엄청나게 큰 배열로 추상화..

[운영체제] Main Memory (3) - Page Protection, Page Table Structure

이번 글에서는 지난 글에서 공부한 페이징의 남은 부분들에 대해서 공부해보도록 하겠습니다. 1. 페이지 보호 (Page Protection) 페이지 테이블을 만들 때, 메모리 보호를 위해서 각 페이지들에 추가적인 비트들을 부여하여 사용할 수 있습니다. 첫 번째로는 Read-write/Read-only를 나타내는 비트입니다. 당연히 Read-write 모드일 때만 데이터를 수정할 수 있으며 Read-only 모드에서는 읽을 수만 있습니다. 두 번째는 Valid-invalid bit입니다. 이 비트가 valid로 설정되어 있으면, 해당 페이지가 프로세스의 논리 주소 공간 안에 있는 합법적인 페이지라는 것을 나타냅니다. 운영체제는 이 비트를 통해서 해당 페이지에 접근을 허용할 것인지 말지를 결정합니다. 예를 들..

[운영체제] Main Memory (2) - Paging

이번에 공부해 볼 내용은 페이징입니다. 바로 앞의 글에서는 하나의 프로세스가 하나의 파티션을 할당받는 연속적인 메모리 할당에 대해서 공부해보았습니다. 하지만 메모리는 비연속적인 물리적 주소 공간을 할당해 줄 수도 있습니다. 그리고 이런 비연속적인 할당을 통해 external fragmentation을 예방할 수 있습니다. 1. 페이징 (Paging) 페이징의 기본적인 방법은 다음과 같습니다. 물리 메모리(physical memory)는 프레임(frame)이라고 불리는 일정한 크기의 고정된 사이즈의 블록들로 나누어집니다. 그리고 논리 메모리(logical memory)는 페이지(page)라고 불리는 프레임과 같은 사이즈의 블록으로 이루어집니다. 그리고 논리 주소는 페이지 번호(page number)와 페이..

[운영체제] Main Memory (1) - Address Binding, Continuous Memory Allocation

이번 글에서는 메인 메모리에 대해서 공부해보도록 하겠습니다. 메모리는 어떤 값을 저장하는 1차원 배열이라고 볼 수 있습니다. CPU는 주소 값을 통해 메모리의 특정 위치에 접근할 수 있습니다. 프로세스가 하나뿐일 때는 그 프로세스가 메모리를 모두 사용해도 되지만, 프로세스가 두 개 이상일 경우 이 메모리 자원들을 어떻게 나누어서 쓸 것인가는 중요한 이슈입니다. 우선은 메모리 주소의 할당부터 하나씩 차근차근 공부해 나가 보도록 하겠습니다. 1. 주소 할당 (Address Binding) 프로그램은 원래 디스크에 저장되어 있습니다. 이 프로그램이 실행되기 위해서는 메인 메모리로 올라와서 프로세스가 되어야 합니다. 그리고 프로세스는 실행될 때 메모리에 적재해 놓은 명령어와 데이터에 접근하여 사용하게 됩니다. ..

[운영체제] Deadlock (3) - Deadlock Avoidance

Deadlock에 대해 마지막으로 공부해 볼 내용은 바로 Deadlock Avoidance, 즉 교착상태 회피입니다. Deadlock Avoidance의 가장 핵심 아이디어는 어떤 자원을 요청할 때, 추가적인 정보를 제공하도록 요구하는 것입니다. 즉, 각각의 프로세스들이 어떤 자원을 어떤 순서로 사용할 것이라는 것을 이미 시스템이 알고 있다면, 미래에 Deadlock이 발생하지 않기 위해 어떤 프로세스가 대기를 해야 하는지 결정할 수 있을 것입니다. 이러한 방법으로 Deadlock의 발생 조건 4가지 중 적어도 하나 이상을 성립하지 않게 만들어줄 수 있습니다. 1. Safe State (안전 상태) 시스템이 안전하다는 말은 시스템이 어떤 순서로든 프로세스들이 원하는 모든 자원을 Deadlock 없이 차례..

[운영체제] Deadlock (2) - Deadlock Prevention

지난번 글에서 Deadlock의 정의가 무엇인지, 또 어떤 상태일 때 Deadlock이 성립하는지에 대해 알아보았습니다. 이번 글에서는 Deadlock을 어떻게 처리해 주어야 하는지에 대해서부터 살펴보겠습니다. 1. Deadlock 처리 방법 Deadlock 문제를 처리하는 데에는 3가지 방법이 존재합니다. 1. 시스템이 Deadlock에 걸리지 않도록 Deadlock을 예방하거나 피하는 프로토콜들을 사용한다. 2. 시스템이 Deadlock이 걸리고 나면 이를 탐지하고, 회복시키는 방법을 사용한다. 3. Deadlock에 관한 사항을 무시하고, Deadlock이 일어나지 않기를 바란다. 마지막 방법은 굉장히 무책임한 방법으로 보이지만, 사실 Windows나 Linux 등 대부분의 운영체제들은 세 번째 방..

[운영체제] Deadlock (1) - Definition

다중 프로그래밍 환경에서는 여러 프로세스들이 한정된 자원을 사용하려고 서로 경쟁하는 상황이 발생할 수 있습니다. 마치 아래의 그림과 같은 상황을 말합니다. 이를 Deadlock (교착상태)이라고 합니다. 이번 글에서는 이 Deadlock에 대해서 상세하게 살펴보고자 합니다. 1. Deadlock의 정의 우선 시스템은 유한한 개수의 자원(resource)들로 이루어집니다. 여기서 자원이라 함은, 예를 들면 CPU나 파일들, 또는 입출력 장치들을 뜻하며, 프로세스들은 이런 자원들을 사용하고자 할 때 요청(Request)을 보내야하고, 사용을 완료하면 방출(Release)을 해 주어야 합니다. 요청을 했을 때 자원이 이미 다른 프로세스에 의해 사용되고 있는 등의 이유로 허용이 되지 않으면, 자원을 얻을 수 있..