OS 25

[OS/운영체제] 파일 시스템 (File System) -(1)

파일 (File) 운영체제는 물리적 메모리의 한 부분을 논리적 저장 단위인 파일로 간주한다. 파일은 보조 저장장치에 기록된 관련된 정보들의 집합이다. 사용자의 관점에서 파일은 보조 저장장치의 최소 할당량이다. 따라서 데이터는 파일 안에 존재하지 않으면 보조 기억장치에 기록될 수 없다. 파일은 프로그램과 데이터를 표현한다. 데이터 파일은 숫자거나, 문자거나, 이진 데이터를 담은 파일일 수 있다. 파일의 형태는 자유롭지만 일반적으로 파일은 비트, 바이트 등의 연속으로, 사용자에 의해 의미가 정해진다. 즉 파일의 정의는 매우 광범위하다. 파일 속성 (File Attributes) 파일은 사용자의 편의를 위해 문자열로 나타낸 이름을 붙여 관리된다. 파일의 이름 등을 포함한 파일의 속성들은 다음과 같다. 이름 (..

운영체제 2020.11.17

[OS/운영체제] 페이지 교체 (Page Replacement) - (3)

스레싱 (Thrashing) 충분한 프레임을 갖지 못한 프로세스는 페이지를 충족하기 위해 페이지 결함을 일으킬 것이다. 이 때, 몇 페이지를 교체해야 한다. 하지만 모든 페이지가 사용 중이었기 때문에, 교체된 페이지들은 바로 즉시 페이지 결함을 다시 발생시킬 것이다. 이런 과정이 반복되면 페이지를 교체하는 시간이 실제로 페이지가 실행되는 시간보다 길어지게 되는데, 이를 스레싱(Thrashing)이라 한다. CPU의 사용률이 낮다면, 새로운 프로세스를 생성해 멀티프로그래밍의 정도를 높여 CPU의 사용률을 높이려 할 것이다. 하지만 이것이 어느 정도를 넘으면 스레싱이 발생해 오히려 다시 사용률이 떨어져 스레싱이 발생한다. 이 경우에는 다시 멀티프로그래밍의 정도를 낮춰야 한다. Working Set Model..

운영체제 2020.11.15

[OS/운영체제] 페이지 교체 (Page Replacement) - (2)

FIFO (First-In, First-Out) Page Replacement FIFO는 가장 단순한 페이지 교체 알고리즘으로, 메모리에 옮겨진 메모리들 중 가장 오래된 페이지를 Victim으로 선택한다. 각 페이지가 메모리로 옮겨진 시간을 직접 기록하는 것이 아니라, FIFO 큐(Queue)를 생성해 메모리의 모든 페이지를 담아 놓는다. 그림에서 처음 7, 0, 1번 페이지에 대해 페이지 결함이 발생하고, 이들 페이지는 순서대로 프레임이 할당된다. 다음으로 2번 페이지의 요청에서 페이지 결함이 발생하고, FIFO 알고리즘에서는 가장 먼저 프레임을 할당받았던 7번 페이지를 Victim으로 선택해, 7번 페이지를 디스크에 기록하고 원래 7번이 할당받은 프레임을 2번 페이지에 새로 할당한다. Belady's..

운영체제 2020.11.15

[OS/운영체제] 페이지 교체 (Page Replacement) - (1)

페이지 교체 (Page Replacement) 페이지 결함률(Page Fault rate)에 대해 언급할 때, 우리는 각 페이지 결함이 최대 한 번, 그 페이지가 참조되었을 때 발생한다고 가정했지만 이는 엄격히 말해서는 정확하지 않은 표현이다. 만약 열 개의 페이지를 가진 프로세스가 실제로는 그 중 절반을 사용한다면, 요구 페이징은 사용되지 않을 5개의 페이지를 적재하는 데 필요한 입출력을 저장해야 한다. 만약 40개의 프레임이 존재한다면, 실제로는 해당 프로세스를 8개까지 실행시킬 수 있지만 4개밖에 실행시키지 못하는 것이다. 우리는 멀티프로그래밍의 정도를 높이고자 할 때, 메모리를 초과 할당(Over-Allocating)한다. 현재 페이지 10개 크기이지만 실제로는 5개의 페이지만 사용하고 있는 6개..

운영체제 2020.11.15

[OS/운영체제] 가상 메모리 (Virtual Memory) - (2)

COW (Copy-on-Write) 지금까지는 프로세스가 어떻게 요구 페이징 시스템에서 시작하는지에 대해 알아보았다. 하지만, fork()를 통해 생성되는 프로세스들은 이러한 요구 페이징 과정을 페이지 공유와 유사한 방법을 통해 건너뛸 수 있다. 이를 통해 프로세스의 빠른 생성과 생성된 프로세스에게 할당되어야 하는 새 페이지들의 수를 최소화할 수 있다. 우리는 앞에서 fork()를 통해 생성된 자식 프로세스는 부모 프로세스의 복사본이라고 했다. 일반적으로 fork()는 부모 프로세스의 주소 공간을 복사해 자식 프로세스를 생성하고, 이는 페이지에 대해서도 동일하다. 하지만 자식 프로세스가 생성된 이후 즉시 exec() 시스템 콜을 발생시키면 이러한 복사 과정은 필요 없는 과정이 된다. 대신 우리는 부모와 ..

운영체제 2020.11.14

[OS/운영체제] 가상 메모리 (Virtual Memory) - (1)

가상 메모리 (Virtual Memory) 지금까지 살펴본 메모리 관리 기법은 명령어가 반드시 물리적 메모리에서 실행되어야 한다는 필요에 의해 사용되었다. 연산이 반드시 물리적 메모리에서 실행되어야 한다는 것은 당연한 것처럼 보이지만, 물리적 메모리의 크기에 따라 한계를 가지게 된다. 프로그램은 일반적으론 발생하지 않는 오류들에 대한 코드들과 같이 프로그램을 실행하는 동안 어쩌면 절대로 실행되지 않을 부분들이 존재한다. 또한 배열, 테이블과 같은 자료구조들은 보통 실제로 필요한 양보다 더 많은 양의 메모리를 할당받는다. 이런 상황들을 보았을 때, 프로그램의 모든 부분이 항상 동시에 필요하진 않을 수 있다. 따라서, 프로그램의 일부만 실제 메모리를 할당하여 실행하는 방법은 효과적일 것이다. 프로그램은 더 ..

운영체제 2020.11.14

[OS/운영체제] 세그먼테이션 (Segmentation)

세그먼테이션 (Segmentation) 페이징 기법과 마찬가지로 메모리 관리 측면에서 가장 중요한 것은 사용자 관점에서의 메모리와 실제 메모리를 분리하는 것이다. 지금까지 봐왔듯 사용자 관점의 메모리는 실제 메모리와 같지 않고, 매핑(mapped)된다. 이러한 매핑을 통해 논리적 메모리와 물리적 메모리를 구분할 수 있다. Basic Method 대부분의 사용자는 메모리를 바이트의 연속적인 배열로 생각하지 않는다. 대신 메모리를 순서가 없는 가변 크기의 Segment(부분)의 모음으로 보게 된다. 마찬가지로 우리는 프로그램을 메소드, 함수, 자료구조 등의 집합으로 생각하게 된다. 프로그램이 어떤 메모리 주소에 담기는지는 신경쓰지 않는다. 세그먼테이션(Segmentation)은 이러한 사용자 관점의 메모리를..

운영체제 2020.11.13

[OS/운영체제] 페이징 (Paging) - (2)

Protection in Paging 페이지를 사용하는 환경에서 메모리를 보호하는 것은 각 프레임마다 Protection bit을 두어 해결할 수 있다. 일반적으로 이 bit는 페이지 테이블에 같이 저장된다. 하나의 bit로 페이지가 읽기 전용인지, 그렇지 않은지를 정의할 수 있다. 모든 메모리 참조는 페이지 테이블을 통해 올바른 프레임 번호를 찾는 과정을 거치는데, 이 때 Protection bit로 해당 페이지가 읽기 전용 페이지인지 확인할 수 있다. (읽기 전용 페이지에 데이터를 쓰는 것은 하드웨어 Trap을 발생시킨다.) 일반적으로 페이지 테이블에 Valid-Invalid bit을 추가한다. 만약 이 bit가 valid라면, 해당 페이지는 프로세스의 논리적 주소 공간에 존재하며, 유효한(valid..

운영체제 2020.11.13

[OS/운영체제] 페이징 (Paging) - (1)

페이징 (Paging) 페이징은 프로세스가 차지하는 물리적 메모리 공간이 비연속적이 되도록 허용하는 메모리 관리 기법을 말한다. 페이징은 외부 단편화가 발생하지 않으며, 따라서 별도의 Compaction 과정이 필요하지 않다. 또한 다양한 크기의 메모리 덩어리(Chunk)들을 Backing store에 맞춰야 하는 문제를 해결해 준다. 이 문제는 메인 메모리를 차지한 코드나 데이터가 swap out될 때, 그만한 공간을 Backing store에서 찾아야 하기 때문에 발생한다. Backing store에서도 동일하게 단편화 문제가 발생하지만, 메인 메모리에서보다 접근 속도가 훨씬 느리기 때문에 Compaction을 적용할 수 없다. 이러한 장점들 때문에 현재 대부분의 운영체제에서 다양한 형태로 사용되는 ..

운영체제 2020.11.13

[OS/운영체제] 메인 메모리 (Main Memory) - (2)

Swapping 프로세스는 실행되기 위해선 반드시 메모리에 존재해야 한다. 하지만 프로세스는 일시적으로 메모리 밖의 Backing Store의 프로세스와 교체될 수 있다. 멀티프로그래밍 환경에서 RR CPU 스케줄링 알고리즘을 사용하는 상황을 예시로 들어보자. 만약 한 Time Quantum이 종료된다면, 종료된 프로세스와 다음 Time Quantum동안 실행될 프로세스가 교체될 것이다. 다음으로 실행될 프로세스를 메모리에 올리는 것이다. 이상적으로는 CPU 스케줄러가 CPU 스케줄을 변경할 때 일부 프로세스가 메모리에 저장되어 실행 준비가 될 정도로 프로세스를 빠르게 교체할 수 있다. (단, Time Quantum은 Swapping 간에 적절한 양의 컴퓨팅이 이루어질 수 있을 만큼 충분히 커야 한다.)..

운영체제 2020.11.12