목록 분류 전체보기 (299)
virual memory - 메모리를 효율적으로 관리하기 위해 이전의 paging 방식과 segmentation 방식을 설명할 때는 프로세스 전체가 메모리내에 적재해야하는다는 것을 전재로 하여 공부하였다. virtual memory는 프로세스의 일부분만 올려 메모리의 물리적 한계를 극복할 수 있도록 한다. - 각 프로세스가 차지하는 공간이 줄어 더 많은 프로세스를 메모리에 올려둘 수 있다. 프로세스를 메모리에 적재하거나 swap하는데 걸리는 시간이 줄어든다. 메모리 크기 제약으로부터 자유로워진다. Demanding paging - 프로세스를 메모리에 적재할 때, 전체 부분을 다 올리지 않고, 필요한 페이지만 우선 적재하고, 나머지는 backing strore에 저장해둔다. cpu가 논리 주소를 페이지 테..
Segmentation : 프로세스를 일정한 크기로 자르는 paging과 달리 논리적으로 잘라서 메모리에 적재한다. 즉 적재되는 세그먼트 크기가 다 다르다. Segmenation address translation - Cpu의 논리 주소를 s/d로 나눠 s는 segment table 인덱스를 나타내고, table에서 맵핑한 값에 더해 물리 주소를 얻는다. 이 부분까지는 페이징과 같으나 세그먼트는 단위의 고정된 크기가 없기 때문에, 다른 영역을 침범하지 못하도록, 또는 그 세그먼트 영역을 구분하도록, 세그먼트 테이블에 Limit 값이 추가된다. - 위 예시에서 논리주소가 s: 2, d: 100이라면, 테이블에서 인덱스 2에 해당하는 베이스 값 (4300)에 d(100)을 더하여 4400이라는 물리주소를 갖..
Paging - MMU에서 register에 logical address와 physical address의 차이를 저장하여, 메인 메모리에 적재되는 위치와 상관없이 logical한 address를 얻을 수 있었던 것처럼, 메모리 영역을 일정 크기로 잘게 나누고, 레지스터를 더 두어 그 차이를 저장하여 프로세스를 쪼개어 적재하는 방식이다. 이렇게 쪼개어 적재하는 것으로 외부 단편화를 해결한다. - 프로세스, 논리 주소를 자르는 단위를 페이지, 메모리를 자르는 단위를 프레임이라고 한다. 페이지 테이블을 두어, 논리 주소가 실제 메모리 안에서는 어느 프레임에 위치하고 있는지를 확인한다. Paging Address Translation - CPU의 논리 주소는 페이지 테이블을 읽고, 페이지 테이블에서 얻은 프레..
Contiguous Memory Allocation - 하나의 프로세스는 연속된 메모리 영역을 갖는다. 이런 연속 메모리 할당이 반복되면 메모리안의 프로세스 사이에 간격 (hole)이 발생할 것이고, 이 hole의 불연속 생성이 지속되면 홀 영역을 합치면 충분한 크기의 프로세스가 영역이 떨어져 로딩이 불가능한 상황이 발생하게 된다. 이를 external fragmentation, 외부 단편화라고 한다. Memory Allocation Method - first fit : 순차적으로 빈공간을 찾아서 바로 할당한다. - best fit : 사이즈가 가장 유사한 공간을 찾아서 할당한다. - worst fit : 사이즈가 가장 먼 공간을 찾아 할당한다. > 속도 측면에선 first fit, 이용율 측면에서는 b..
Link / Load MMU ( Memory management unit ) - 메모리 영역 보호 : 다른 프로세스 영역으로 침범할 수 없도록 보호한다. - Address translation : register에 cpu에서의 주소 (logical address)와 실제 적재된 메모리 위치 (physical address)의 차이를 따로 저장하여, 프로세스가 가변적인 위치로 메모리에 저장되어도, CPU는 상관없이 기존 논리 주소를 사용할 수 있도록 한다. Prevent memory waste - Dynamic load : 프로그램을 메모리에 load할 때, 동적으로 필수적인 부분만 먼저 올리고, 부가적인 부분은 대상에서 제외하는 것이다. 프로그램 내의 모든 데이터, 모든 class가 다 사용되는 것은 아..
Dead Lock - P1과 P2가 각각 R1, R2 자원을 사용 중이다. P1은 t0 시점에서 R1,R2를 동시에 사용하여 작업을 처리해야하고, P2는 그보다 조금 이후인 t1에서 두 자원을 엑세스 해야한다. - t0에서 R2를 엑세스하고자 했던 P1은 R2가 반환될 때까지 기다리고, t1에서 R1을 엑세스하고자 했던 P2 역시 P1이 작업을 처리하여 R1을 반납하기를 기다리게 되어, 둘은 무한 기다림에 빠질 것이다. - 이런 교착 상태를 Dead Lock이라고 한다. Dead Lock Necessary Condition - Dead Lock은 다음의 4가지 상태를 모두 만족하는 상황에서 발생한다. 1. Mutual exclusion 2. Hold and Wait 3. No Preemption 4. C..
Traditional synchronization example - producer and consumer problem - Readers and Writers problem - Dining Philosopher problem Producer and Consumer problem - 생산자는 일방적으로 데이터를 생성하고, 소비자는 그것을 소비하는 상황에서 발생하는 문제이다. - 생산자와 소비자의 데이터 처리 속도 차이로, 생산된 데이터를 날리는 것이 아닌 유한 크기 버퍼(bounded buffer)에 임시 저장하고, 소비자는 이를 차례로 사용하는 상황을 생각해보자. Pro1 _ Critical section : 우선 버퍼 크기를 알 수 있는 buffer_count 변수가 생성자에 의해선 증가하고, 동시에..