본문 바로가기

Computer Science/운영체제9

[OS] 메모리 관리(4) - 가상 메모리 가상 메모리(Virtual Memory) 배경 한 프로세스의 크기는 물리 메모리의 크기보다 클 수 없다. 프로세스는 항상 메모리에 적재되어 있어야하기 때문이다. 그런데, 반드시 모든 프로세스가 항상 메모리에 올라와 있어야할까? 그렇지는 않다. 왜냐하면 모든 프로세스가 항상 동시에 실행되는 것은 아니기 때문이다. 예를 들어, 워드 프로세스와 웹 브라우저를 동시에 실행시켜놓고, 웹 서핑만 계속하는 경우, 워드 프로세스가 반드시 메모리에 올라와있어야 할 이유는 없다. 또한 현재 실행되고 있는 프로세스일지라도, 반드시 모든 코드가 메모리에 올라올 필요는 없다. 예를 들어, 예외처리를 위한 코드, 잘 사용되지 않는 기능을 위한 코드, 필요 이상으로 크게 할당된 배열 등, 당장 필요하지 않는 내용들이 존재한다. 따.. 2021. 8. 8.
[OS] 메모리 관리(3) - Page Table 페이지 테이블(Page Table) 이전 포스팅에서 살펴본 바와 같이 페이지 테이블은 MMU가 논리 주소를 물리 주소로 변환하는 과정에서 페이지와 프레임을 매핑해주는 역할을 한다. OS는 각 프로세스마다 하나의 page table을 할당한다. 페이지 테이블이 256개 이하인 경우 레지스터를 이용할 수 있지만 대부분의 경우 메인 메모리에 저장된다. 메인 메모리를 이용한 페이지 테이블에서는 페이지 테이블에 대한 최소한의 정보를 레지스터에 저장해 실행 속도를 높일 수 있다. PTBR(Page Table Base Register): 페이지 테이블에 대한 메모리 주소를 저장 PTLR(Page Table Length Register): 페이지 테이블의 크기를 저장, memory protection에 이용됨. 한계 .. 2021. 8. 8.
[OS] 메모리 관리(2) - 페이징 연속 메모리 할당 외부 단편화 문제 프로세스는 메모리의 연속된 공간에 존재해야한다. 그런데 이런 연속 메모리 할당(Contiguous Memory Allocation)은 외부 단편화(external fragmentation) 문제를 낳는다. 외부 단편화란, 메모리의 빈 공간이 불연속적으로 흩어져있어서 빈 공간을 합한 크기가 하나의 프로세스를 할당하기 충분한 크기임에도 프로세스를 할당하지 못하는 것이다. 그림으로 살펴보면 다음과 같다. 메모리에 프로세스 A, B, C가 올라와있다. 아무것도 할당되지 않은 빈 공간을 hole이라고 한다. B가 모든 작업을 마치고 메모리에서 내려간다. 메모리에는 총 1000의 빈 공간이 있지만 그림처럼 500, 500으로 나뉘어있다. 그래서 새로운 프로세스 D는 600의 공간.. 2021. 8. 8.
[OS] 메모리 관리(1) - 동적 로딩,연결,스와핑 CPU 스케줄링과 더불어 OS의 중요한 업무 하나가 바로 메모리 관리(Memory Management)이다. 기술의 발전과 더불어 메모리의 용량이 빠르게 증가했지만 그 발전 속도만큼 메모리 사용량도 빠르게 증가했기 때문에 메모리를 얼마나 효율적으로 사용하는가는 컴퓨터 발전 역사에 있어서 항상 중요한 문제였다. 메모리를 효과적으로 사용하기 위한 방법에 대해 OS는 두 가지 측면에서 접근한다. 메모리 낭비 없애기 가상 메모리(Virtual Memory) 메모리 낭비 없애기 OS가 낭비되는 메모리를 줄이기 위해 어떤 방법을 이용하는지 알아보기 전에 우선 프로그램이 메모리에 적재되는 과정을 살펴보자. 프로그램이 메모리에 올라가는 과정 우선 메모리는 다음과 같이 주소(address)와 데이터(data)로 구성된다.. 2021. 8. 8.
[OS] 교착상태 (Deadlock) 교착상태(Deadlock)란? 정상적인 시스템에서 프로세스는 요청 → 사용 → 방출 순서로 자원을 사용한다. 요청: 프로세스는 자원을 요청한다. 요청이 즉시 처리되지 않는 경우(ex. 다른 프로세스가 해당 자원을 사용 중인 경우) 프로세스는 자원을 얻을 때까지 대기해야 한다. 사용: 자원에 대한 작업을 실행한다. 방출: 자원을 방출한다. 자원의 요청과 방출은 시스템 콜이다. 예시로는 디바이스의 request()와 release(), 파일의 open() 과 close(), 메모리의 allocate()와 free() 등이 있다. OS가 관리하지 않는 자원의 요청과 방출은 세마포어에 대한 wait() & signal() 또는 뮤텍스 락의 획득과 방출을 통해서 이루어질 수 있다. 커널이 관리하는 자원을 프로세스.. 2021. 7. 7.
[OS] 세마포어 (Semaphore) 동기화 방법에는 여러 가지가 있으며 하드웨어적으로 해결하는 방법과 소프트웨어적으로 해결하는 방법으로 나뉩니다. 여기서는 소프트웨어적 해결 방안 중 하나인 세마포어에 대해 알아보겠습니다. 세마포어는 동기화 문제 해결을 위해 네덜란드의 컴퓨터 과학자 에츠허르 다익스트라(Edsger Wybe Dijkstra)가 제안한 소프트웨어 도구입니다. 추상적인 설명보다는 세마포어를 직접 사용하면서 차근차근 알아가봅시다. 세마포어의 구조는 한 개의 정수형 변수와 두 개의 동작으로 구성되어 있습니다. 두 개의 동작은 다음과 같이 불립니다. P = Proberen(test) = wait = acquire V = Verhogen(increment) = signal = release Proberen&Verhogen은 네덜란드어이.. 2021. 7. 7.