SW Engineering/OS Concept 62

32_가상 메모리(Virtual Memory)

32_가상 메모리(Virtual Memory) 가상 메모리(Virtual Memory)는 프로세스 전체가 메모리에 올라와 있지 않아도 실행이 가능하도록 하는 기법이다. 주요 장점중의 하나는 프로그램이 물리 메모리보다 커도 된다는 것이다. 가상 메모리는 물리 메모리로부터 사용자 관점의 논리 메모리를 분리시켜 주 메모리를 균일한 크기의 저장공간으로 구성된 큰 배열로 추상화 시켜 준다. 또한 파일 공유를 쉽게 해주고 공유 메모리 구현을 가능하게 한다. 단점으로는 구현이 어렵고 잘못 사용하게 된다면 성능이 현저히 저하될 수 있다. 한 프로세스의 가상 주고 공간은 그 프로세스가 메모리에 저장되는 논리적인(또는 가상적인) 모습(View)을 말한다. 일반적으로 특정 논리 주소에서(보통 0번지)시작하여 연속적인 공간을..

31_페이지 세그먼테이션(Segmentation)

31_페이지 세그먼테이션(Segmentation) 메모리 관리에서 사용자가 바라보는 메모리 관점과 실제 물리적인 메모리의 관점을 분리되어 있다는 것은 매우 중요하다. 그렇다면 사용자는 메모리를 관리할 때 어떤 관점으로 바라보아야 하는가? 세그먼테이션(segmentation)은 사용자 관점 그대로 메모리를 관리하는 기법이다. 논리 구조 공간을 세그먼테이션 집합으로 정의하고 각 세그먼트는 이름과 길이를 가진다. 시스템에서는 논리 주소가 세그먼트 이름과 세그먼트 내에서의 변위로 나누어 진다. 사용자 프로그램이 컴파일 되면 컴파일러는 자동으로 입력 프로그램을 읽어 세그먼트들을 만들어 내며 구현을 쉽게 하기 위해 세그먼트 이름 대신 세그먼트 번호가 시스템에 의해 매겨진다. 따라서 논리주소는 으로 구성 된다. C에..

30_페이지 테이블 구조 (page table structure)

30_페이지 테이블 구조 (page table structure) 현대의 컴퓨터 환경에서는 매우 큰 주소 공간을 가진다. (2^32 ~ 2^64) 이러한 환경에서는 페이지 테이블도 커진다. 예를 들어 32bit 환경에서 페이지의 크기가 4KB(2^12)이면 페이지 테이블은 100만개(2^32/2^12)로 구성되며 각 항목은 4byte로 구성되기 때문에 각 프로세스는 페이지 테이블만해도 4MB가 필요하다. [계층적 페이지] 큰 페이지 테이블은 작은 조각으로 나누어 관리하는 것이 효율적이며 이러한 방법을 2단계 페이징 기법(two-level paging scheme)이라 한다. 2단계 페이지 기법은 페이지 자체가 다시 페이지화 되는 것으로 4KB의 크기를 가진 32bit 환경을 예로 들면 논리주소는 20bi..

29_메모리 페이징(2) (Paging)

29_메모리 페이징(2) (Paging) 각 운영체제는 페이지 테이블을 저장하기 위한 고유의 방법을 가지고 있다. 디스패처가 어떤 프로세스를 시작 시킬 때 이 레지스터들을 다시 적재하면 페이지 테이블도 함께 사용 할 수 있게 된다. 페이지 테이블은 레지스터의 집합으로 구현되기도 한다. 메모리의 모든 액세스는 이 페이징 맵을 통해야 하므로 매핑의 효율은 매우 중요하다. 디스패처는 이들 레지스터를 채우며 운영체제가 이를 담당한다. 페이지 테이블에 레지스터를 사용하는 것은 페이지 테이블이 작은 경우 적합하다. 하지만 대부분의 컴퓨터들은 수백만 항목에 이를 만큼 매우 크다. 이러한 컴퓨터의 페이지 테이블을 구현하기 위해서 빠른 레지스터를 사용하는 것은 부적절하다.(레지스터 비용이 비싸기 때문이다.) 그래서 대부..

28_메모리 페이징 (Paging)

28_메모리 페이징 (Paging) 페이징은 논리적 주소 공간이 한 연속적인 공간에 다 모여 있어야 한다는 제약이 없다. 따라서 페이징을 사용하면 메인 메모리에 올라와 있던 부분을 디스크로 내보낼 때 디스크상에 이들을 연속적으로 수용할 수 있는 자유 공간을 탐색하는 오버헤드가 발생하지 않는다. (대부분의 오버헤드는 메모리에 있던 코드의 일부가 스왑 아웃되고 이들을 저장하기 위한 공간을 디스크(backing store)에서 찾는 과정에서 발생한다.) 메모리 스와핑 : http://sqlmvp.kr/140191090013 물리 메모리는 프레임(frame)이라 불리는 같은 크기 블록으로 나누어져 있다, 논리 메모리는 페이지(page)라 불리는 같은 크기의 블록으로 나누어 진다. 한 프로세스가 실행 될 때 그 ..

27_연속 메모리 할당 (Contiguous Memory Allocation)

27_연속 메모리 할당 (Contiguous Memory Allocation) 메인 메모리는 운영체제 뿐만 아니라 여러 사용자 프로세스도 수용해야 한다. 일반적으로 사용되는 연속 메모리 할당에 대해서 알아 보자. 메모리는 일반 적으로 두 개의 부분으로 나누어 진다. 메모리에 상주하는 운영체제를 위한 것 사용자 프로세스를 위한 것. 운영체제는 메모리의 어느쪽 끝에도 위치할 수 있으며 이 결정에 영향을 미치는 요인은 인터럽트 벡터 이다. 인터럽트 벡터는 흔히 0번지에 위치하기 때문에 운영체제는 하위 메모리에 위치시키는 것이 보통이다. 일반 적으로 여러 프로세스가 동시에 메모리에 올라와 있는 것이 바람직하기 때문에 메모리에 올라오고자 입력 큐에서 기다리는 중인 프로세스들에게 메모리를 얼만큼씩 어떻게 할당하는 ..

26_메모리 스와핑(Swapping)

26_메모리 스와핑(Swapping) 프로세스가 실행되기 위해서는 메모리에 있어야 하지만 필요한 경우 프로세스는 실행도중에 임시로 보조 메모리로 보내어졌다가 다시 메모리로 되돌아 올 수 있다. 라운드로빈 스케줄링을 하는 경우 다중 프로그램 환경에서 한 프로세스가 CPU 할당 시간이 끝나면 메모리 관리기(MMU)가 이 프로세스를 보조 메모리로 보내고 다른 프로세스를 메모리로 불러올 수 있다. CPU 스케줄러는 메모리 내의 다른 프로세스에게도 시간 할당량(time quantum)을 정해 놓고 그 할당량을 모두 소비했을 때 그 프로세스도 스왑시킬 수 있다. CPU 스케줄러는 할아 시간이 만료 되어 CPU를 새로 스케줄 할 때마다 메모리 관리기가 메모리 내에 준비시켜 놓은 여러 프로세스들 중 하나를 고르기만 하..

25_메인 메모리(Main Memory)

25_메인 메모리(Main Memory) CPU는 PC(Program Counter)가 지시 하는대로 메인 메모리로부터 다음 수행할 명령어를 가져오는데 그 명령어는 필요한 경우 추가적인 자료를 더 가져올 수 있으며 반대로 자료를 메모리로 내보낼 수도 있다. 메인 메모리와 CPU에 내장되어 있는 레지스터들은 CPU가 직접 접근할 수 있는 유일한 저장 장치이다. 모든 실행되는 명령어와 자료들은 CPU가 직접 접근할 수 있는 메인 메모리와 레지스터에 있어야 한다. 만약 자료가 메모리에 없다면 CPU가 처리하기 전에 메모리로 이동(Load)해야 한다. 레지스터들은 일반적으로 CPU클록(clock)의 1사이트(cycle)내에 접근이 가능하지만 메인 메모리의 경우 많은 CPU 클록 및 사이클이 소요되어 CPU가 필..

24_교착 상태(Deadlock)

24_교착 상태(Deadlock) 다중 프로그래밍 환경에서 여러 프로세스들이 한정된 자원을 사용하려고 서로 경쟁 할 수 있다. 한 프로세스가 자원을 요청 했을 때 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있고 그 때는 프로세스가 대기 상태로 들어 간다. 이처럼 대기중인 프로세스들이(요청된 프로세스가 다른 프로세스에 의해 대기) 다시는 그 상태를 변경 시킬 수 없으며 이러한 상황을 교착 상태라 한다. 교착 상태는 한 시스템 내에서 다음의 조건이 동시에 설립 될 때 발생한다. 상호 배제(Mutual exclusion) : 최소한 하나의 자원이 비공유 모드로 점유되어야 한다. 비공유 모드에서는 한 번에 한 프로세스만이 그 자원을 사용할 수 있다. 다른 프로세스가 그 자원을 요청하면 요청 프로세스..

23_원자적 트랜잭션 (Atomic Transaction) – 직렬화, 락킹 프로토콜, 타임스탬프 프로토콜

23_원자적 트랜잭션 (Atomic Transaction) 직렬가능성(Serializability), 락킹 프로토콜(Locking Protocol), 타임스탬프 기반 프로토콜(Timestamp Base Protocol) 직렬 가능성이란 임계구역 내에서 다수의 트랜잭션들이 동시 활성화 될 경우 각 트랜잭션들은 원자적이기 때문에 여러 트랜잭션들을 병렬로 수행시키면 그 결과는 이 모든 트랜잭션들을 어떤 임의의 순서에 따라 하나씩 차례로 순차적으로 실행되는 것을 말한다. 직렬 가능성으로 트랜잭션이 병렬로 수행되면 원자성이 보장되기는 하지만 비효율이 발생 하므로 몇 가지 동시성 제어 알고리즘(concurrency-control algorithm)이 직렬성을 유지하면서 트랜잭션 수행을 중첩 시킬 수 있다. [직렬 ..