본문 바로가기

Computer Science50

Lock의 개념과 구현 방법 Lock이란? 앞서 설명했듯 critical section이란 여러 thread에서 동시에 실행되면 안되는 부분을 말한다. 따라서 critical section을 하나의 thread에서만 접근할 수 있도록 보호해야할 필요가 있다. 이 때 lock을 사용하면 critical section을 보호할 수 있다. lock은 기본적으로 lock을 획득한 thread만 critical section을 실행하며, 사용하고 난 뒤에 lock을 반환한다. 따라서 다른 thread가 lock을 갖고 있지 않을 때 lock을 획득하는 lock() 함수와 critical section을 모두 수행한 뒤에 lock을 반환하는 unlock() 함수가 사용된다. 그렇다면 lock은 어떻게 사용하고, 어떻게 구현하고 평가하는지 알아.. 2019. 9. 5.
Thread와 Thread API Thread의 개념과 특징 Thread는 하나의 프로세스에서 동시에 여러 작업을 수행해야 할 때 사용한다. 특히 I/O 작업과 같이 대기하는 시간이 긴 작업을 할 때 Thread를 이용하여 다른 작업을 수행하는 것이 효율적이다. 서로 다른 프로세스는 주소공간을 공유하지 않지만 Thread의 경우는 모두 같은 주소공간을 사용한다. 이렇게 주소공간을 공유할 경우 동시에 같은 자원에 접근할 때 문제가 생길 수 있다. Concurrency Problem 두 개의 Thread가 각각 하나의 counter 변수를 증가시키는 상황에서 어떤 문제가 발생하는 지 알아보자. 각각의 Thread의 코드는 다음과 같다. ① counter 변수를 받아온다. ② 받아온 변수를 1 증가시킨다. ③ 증가시킨 변수를 counter 변.. 2019. 9. 4.
Page Swapping이란? Swapping과 Swap Space 일반적으로 프로세스가 사용하는 자원은 RAM, 메인 메모리에 들어있다. 그러나 프로세스가 사용해야 할 모든 자원을 메인 메모리에 올리기에는 용량이 부족하다. 따라서 일부의 작업만 메인 메모리에 올리고 나머지는 다른 저장 공간에 저장한 뒤에 필요할 때 불러와 사용하게 된다. 이 과정을 Swapping이라 하며 메인 메모리에 올라가지 못한 자원이 저장되는 공간을 Swap Space라고 한다. Memory Access Flow 자원에 접근하기 위해서는 가상 메모리 주소를 물리적 주소로 변환하는 다음과 같은 translation 과정이 필요하다. 1. 먼저 TLB를 확인한다. -> TLB에 요청받은 주소가 있다면 물리적 주소를 반환받는다. (끝) -> 요청받은 주소가 없다면.. 2019. 9. 2.
Data Model / DML, DDL Data Model이란? Data Model이란 데이터베이스를 관리하기 위한 여러가지 방법론으로, 가장 많이 쓰이는 모델로는 Relational Model과 E-R Model이 있다. Relational Model이란? 데이터베이스 관리를 위한 방법론으로, 데이터를 입력, 삭제하거나 검색 등의 기능들을 명령문을 통해 수행한다. 이를 위해서는 데이터를 저장할 구조, 데이터 관리를 위한 언어를 정해놓아야 한다. 이와 같은 Relational Model을 사용하여 만든 데이터베이스를 Relational Database라 한다. Relational Database의 구조 Relational Database는 table의 형태로 데이터를 저장하며, 각 table의 행을 tuple 또는 row라 하며 열을 attr.. 2019. 6. 5.
Advanced Page Table 기존 Page Table의 문제점 32bit 주소체계 / Page 크기 : 16KB 라 가정하자. 이 때 Offset은 페이지 크기인 16*2^10=2^14bit가 필요하다. 따라서 32-14=18bit가 VPN으로 사용 가능하므로 총 2^18개의 VPN을 표현할 수 있다. Page Table은 VPN 수로 크기가 정해지므로, 하나의 Entry가 4byte라면 4*2^18=2^20byte=1MB 크기가 될 것이다. Page Table은 프로세스 하나당 한개씩 생성되므로 프로세스가 100개라면 무려 100MB의 메모리를 차지하게 된다. 따라서 Page Table의 크기를 더 줄여야 할 필요가 있다. Page Table에는 위와 같이 할당받았지만 사용하지 않는 Page들에 대한 Entry들도 모두 저장되어있.. 2019. 4. 23.
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.