본문 바로가기

전체 글117

Translation Lookaside Buffers - TLB란? TLB란? Address Translation 과정에서 VPN을 PFN으로 변환하려면 Page Table에 접근하여야 한다. 이 과정을 더 빠르게 하기 위해 자주 쓰이는 Translation들을 Memory Management Unit(MMU)에 저장하여 사용하는데 이렇게 저장한 Cache를 TLB라 한다. TLB 기본 알고리즘 1. Translation 요청이 들어오면 주소값에서 VPN을 추출한다. 2. 해당하는 Translation이 TLB에 있는 지 확인한다. 3-1. TLB에 있다면 VPN을 PFN으로 변환하여 반환한다. (TLB Hit) 3-2. TLB에 없다면 Page Table에 접근하여 PFN으로 변환하여 반환한다. (TLB Miss) 그 후 해당 Translation을 TLB에 업데이트한.. 2019. 4. 23.
Paging이란? Paging이란? Paging이란 가상주소공간을 일정한 크기의 Page로 나누는 것을 말한다. 물리적 메모리는 이런 Page들을 담기 위한 영역으로 나누는데 이를 Page Frame이라 한다. 또한 나뉘어진 가상주소공간의 Page가 물리적 메모리의 어떤 Page Frame에 저장되는지를 Page Table에 기록한다. 이렇게 일정한 단위로 주소공간을 나눔으로써 메모리 할당이나 Free List 관리 또한 용이해진다. Page와 Page Frame 가상주소공간이 64byte라 할 때 하나의 Page 크기를 16byte로 정하면 4개의 Page로 나눌 수 있고 이를 저장하기 위해서는 물리적 메모리에서 4개의 Page Frame을 할당해주어야 한다. Address Translation 이렇게 주소 공간을 기존.. 2019. 4. 23.
Free-Space Management Memory Compaction 앞서 말했던 External Fragmentation을 막기 위해서는 할당되지 않은 공간을 하나로 합쳐 연속된 공간으로 만드는 작업이 필요하다. 이를 Memory Compaction이라 한다. Splitting과 Coalescing 위와 같은 주소 공간에서 사용하지 않는 영역의 크기보다 작은 크기에 메모리 요청이 들어오면 한 영역을 둘로 나누어 요청이 들어온 만큼을 할당해주는데 이를 Splitting이라 한다. 위 그림과 같이 Free List에 연속된 주소에 빈 공간이 들어있다면 이렇게 하나의 덩어리로 합칠 수 있는데 이를 Coalescing이라 한다. 메모리 공간의 구조 각각의 메모리 공간에는 header 부분이 있고 그 안에 여러가지 정보를 담고 있다. 할당된 영역의.. 2019. 4. 23.
Segmentation이란? Segment란? Segment란 일정한 크기의 연속된 주소공간을 말하며 Code, Heap, Stack Segment로 구분한다. 이와 같이 영역을 나누는 것을 Segmentation이라 한다. 기존 할당 방식의 문제점 기존의 메모리 할당 방식에서는 Heap과 Stack영역 사이에 빈 공간을 두어 Heap이나 Stack이 모자랄 경우 확장할 수 있도록 하였다. 하지만 Heap과 Stack을 확장할 필요 없는 프로세스들이 많아지게 된다면 이와 같은 할당되었지만 사용하지 않는 공간이 많아지게 되어 메모리 낭비가 발생한다(Internal Fragmentation, 내부 단편화). 새로운 Segment 배치 방법 따라서 위 그림과 같이 Segment를 배치하게 되면, 사용하지 않는 공간이 줄어들어 메모리를 효.. 2019. 4. 23.
Virtual Address Space와 Address Translation Memory Virtualization (메모리 가상화) OS는 각각의 프로세스가 메모리 전체를 사용한다는 가상의 메모리 공간을 제공해야 한다. 가상 주소 공간을 통해 개발자들은 메모리 주소가 연속되어있다는 가정 하에 프로그래밍을 할 수 있다. 더불어 실제 물리적 주소를 숨김으로서 프로세스와 OS를 보호할 수 있다. Virtual Address Space 가상 주소 공간은 크게 세 가지 영역으로 구성되어있다. 프로그램의 명령어를 저장하는 Code 영역, 동적 메모리 할당을 위한 Heap 영역, 지역변수와 매개변수 등의 저장을 위한 Stack 영역이다. 이 때 Heap과 Stack 사이에 사용하지 않는 빈 공간은 Heap이나 Stack이 모자랄 경우 확장하여 사용한다. Address Translation이.. 2019. 4. 23.
Memory API란? Memory API란? Memory API란 사용자가 메모리를 관리할 수 있도록 제공하는 System Call이다. 대표적인 Memory API - malloc() : heap 영역에 메모리 공간을 할당한다. - sizeof() : 할당된 메모리 영역의 크기를 가져온다. - free() : malloc을 통해 할당된 메모리 공간을 반환한다. 주의사항 char *src = "hello";// character string char *dst;// unallocated strcpy(dst, src);// Segmentation Fault! 1. 메모리 할당 후 접근한다. int *x = (int*)malloc(sizeof(int));// memory allocate printf("*x = %d\n", *x);.. 2019. 4. 22.
CPU Scheduling 기법 Scheduling 기준 CPU Scheduling은 크게 두 가지를 고려하여야 한다. 첫 번째, 공평함이다. 하나의 프로세스만 수행되는 것을 막고 모든 프로세스가 사용할 수 있도록 하여야 한다. 두 번째, 성능이다. 공평하게 수행하는 것 뿐만 아니라 가장 적은 시간 안에 수행해야 한다. 따라서 우리는 작업이 도착한 시간부터 시작까지 걸린 시간(Response Time)과 완료까지 걸린 시간(Turnaround Time)을 기준으로 각각의 기법들을 평가한다. 1. First In, First Out (FIFO) 선입선출 방식, 먼저 들어온 작업이 먼저 수행되는 방식으로 가장 기본적으로 생각할 수 있는 방식이다. 하지만 아래와 같은 경우를 보자. 첫 번째로 들어온 작업이 큰 작업일 경우 10초면 끝날 작업.. 2019. 4. 22.
System Call이란? System Call이란? System Call이란 앞서 말했 듯 OS가 Application에게 제공하는 Interface이다. System Call을 사용하는 이유 OS는 프로세스의 실행, 종료나 I/O 작업 등의 사용자가 함부로 사용하면 문제가 될 만한 명령들을 Privileged Instruction으로 분류하여 막아놓았다. 따라서 사용자들이 이와 같은 기능을 사용하기 위해서는 OS가 제공하는 System Call을 사용하여야 한다. System Call (Process Control) 1. folk() - 새 프로세스를 생성한다. 2. wait() - 자식 프로세스가 끝날 때까지 대기한다. 3. exec() - 다른 프로그램을 실행한다. System Call 수행 과정 프로세스가 System C.. 2019. 4. 22.
Process와 Process API란? Process란? "Process is a program in execution" 프로세스란 실행 중인 프로그램이다. 프로그램이란 기본적으로 명령어(Instruction)의 목록이다. 따라서 프로그램 실행이란 주어진 명령어의 목록(코드)을 메모리를 할당하여 그 위에 올려놓고 수행하는 것이다. 이렇게 실행중인 프로그램을 프로세스라고 한다. Process 실행 과정 1. 코드와 데이터를 디스크로부터 메모리로 불러온다(Fetch). 2. 스택(Stack), 힙(Heap) 메모리를 할당(Allocate)한다. 3. I/O Setup 등의 사전 작업을 수행한다. 4. 시작점(main)으로 진입한다. 5. 명령어를 해석(Decode)하여 수행(Execute)하는 작업을 반복한다. Process의 상태 프로세스의 상.. 2019. 4. 22.