본문 바로가기

반응형

CS

(46)
[ 운영체제 ] 가상 메모리1 - Swapping, Demand Paging, Valid bit, Page Fault 가상 메모리가 무엇일까? 물리적 주소와 논리적 주소를 이해했다면 쉽게 이해할 수 있다. 왜냐하면 메모리는 주소의 집합이기 때문이다. 가상 메모리는 가상 주소의 집합에 불과하다. 우리는 논리적 주소(가상 주소)를 'CPU 입장에서의 주소'라했고, 모든 프로세스의 가상 주소는 0부터 시작한다고 했다(여기 참고). 이렇게 모든 프로세스는 각각 독립적인 가상 주소 공간을 가지는데, 이를 가상 메모리라고 한다. 그렇다면 가상 메모리를 사용하는 이유는 무엇일까? 크게 아래 세 가지를 뽑을 수 있다. 1. 사용자 편의성 사용자는 가상 메모리만 신경쓰면 된다. 물리적 메모리로의 사상은 OS가 알아서 한다. 2. 프로세스간 메모리 보호 Base Register와 Limit Register로 프로세스는 물리적 메모리에서 ..
[ 운영체제 ] 메모리 관리3 - 페이징 단점, 내부 단편화, TLB, 세그멘테이션(Segmentation) 페이징은 외부 단편화 해결 방법으로 논리적 주소의 물리적 주소 사상을 불연속적으로 하는 메모리 관리 구조를 말한다. 그런데 이 세상에 완벽한 것은 없다. 득이 있으면 실도 있는법. 이번 글에서는 페이징의 세 가지 단점에 대해 소개한다. 그리고 각 문제의 해결책까지 살펴보는 것이 목표다. 우선 목차는 아래와 같다. 1. 내부 단편화 2. 메모리에 두 번 접근하는 문제 3. 프레임 내 데이터 종류 불일치 문제 1. 내부 단편화 (Internal Fragmentation) 외부 단편화는 주소를 연속적으로 할당해서 생기는 메모리 낭비였다. 이와 반대로 내부 단편화는 주소를 불연속적으로 할당해서 생기는 메모리 낭비다. 메모리 낭비가 생기는 이유는 '고정된 프레임 크기' 때문이다. 프레임 크기는 메모리를 읽기/쓰기..
[ 운영체제 ] 메모리 관리2 - 페이지 테이블의 세 가지 구조 저번 시간에 '풀리지 않은 의문점'에서 페이지 테이블은 연속적이기 때문에 페이지 테이블을 새롭게 디자인할 필요가 있다고 했었다. 따라서 오늘은 페이지 테이블의 세 가지 구조를 다룬다. 세 가지 구조는 각각 아래와 같다. 이 글의 목차로 생각하면 된다. 1. 계층적 페이지 테이블 (Hierarchical Page Table) 2. 해시형 페이지 테이블 (Hashed Page Table) 3. 역페이지 테이블 (Inverted Page Table) 1. 계층적 페이지 테이블 (Hierarchical Page Table) 우선 페이지 테이블이 연속적일 경우 어떤 문제가 발생하는지 보자. 일반적으로 페이지의 크기는 4KB(2^12 B)로 잡는다. 32 비트 주소 체계와 64비트 주소 체계인 경우 페이지 테이블의..
[ 운영체제 ] 메모리 관리 1 - 페이징(Paging) 드디어 대망의 메모리 관리 파트다. '메모리 계층 구조'부터 '주소 공간'까지 아직 안 읽었다면 읽고 오는 것을 추천한다. 앞의 내용을 숙지하고 있어야 이번 챕터를 잘 이해할 수 있기 때문이다.  이번 글은 논리적 주소를 물리적 주소로 mapping 할때 연속적으로 mapping 하면 어떤 문제가 발생하는지, 이에 대한 해결책은 무엇인지 알아본다. 해결책은 제목에 떡하니 나와 있다. 연속 할당의 문제점 - 외부 단편화(External Fragmentation)바로 이전 글에서 논리적 주소를 설명하면서 '연속 할당'의 개념을 다뤘었다. 다시 한 번 상기시켜보자. 연속 할당이란 한 프로세스의 모든 논리적 주소에 동일한 base register를 더해주는 것이다. 이는 MMU에 의해 이뤄지며 주소는 Execu..
[ 운영체제 ] 주소 공간(Address Space), 물리적 주소(Physical Address), 논리적 주소(Logical Address), 주소 바인딩(Address Binding) 저번 글에서는 컴파일, 런타임, 로딩을 이해하는 시간을 가졌다. 이 세 용어를 확실하게 이해했다면 이번 글은 술술 읽으면서 넘길 수 있을 것이다. '메모리 계층 구조'부터 이 글까지는 '메모리 관리'파트를 이해하기 위한 단계라고 생각하면 된다. 우리가 앞으로 배울 내용을 한 문장으로 요약하면 아래와 같다. 참고로 메모리는 캐시부터 메인 메모리까지를 통칭하는데 이 글과 '메모리 파트'에서는 주로 메인 메모리로 쓰인다. 한정된 메모리 공간을 어떻게 하면 효율적으로 관리할 수 있을까? CPU가 직접적으로 접근할 수 있는 저장 장치는 메모리다. 그러나 메모리 공간은 한정적이다. 여러 개의 프로그램을 실행해야 하는 운영체제는 협소한 메모리 공간을 최대한 효율적으로 관리해서 CPU가 필요한 데이터를 빨리 끌어올 수..
[ 운영체제 ] 컴파일(Compile)과 링킹(Linking), 런타임(Runtime), 로딩(Loading) 이 글에서는 주소 바인딩(Address Binding)을 이해하기 위해 꼭 알아야 하는 용어들을 설명한다. 원래 주소 바인딩을 바로 다루려고 했으나 정리하다가 용어가 헷갈려서 공부할겸 정리한다. 컴파일, 런타임, 로딩을 정확하게 이해해야 주소 바인딩을 이해할 수 있다. 컴파일이란? 컴파일은 원시 코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정을 말한다. 아래 그림을 보자. 위 그림은 컴파일 과정을 나타낸 그림이다. 우리는 컴퓨터가 0과 1만 이해할 수 있다는 것을 잊으면 안 된다. 우리가 흔히 쓰는 파이썬이나 자바, C++과 같은 고급 프로그래밍 언어는 컴퓨터 입장에서는 외계어다. 따라서 우리가 짠 소스코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정이 필요한데, 이를 '컴파일'이라고 한다...
[ 운영체제 ] 메모리 계층 구조 이 글은 '메모리 관리'를 공부하기 전에 숙지하고 있으면 도움이 될만한 내용이다. 워밍업 단계라고 생각하자. 먼저 이 글을 포함해서 '메모리 관리' 파트를 읽을 때 컴퓨터구조 지식이 약간 필요하다. 즉, CPU의 작동 원리를 알고 있으면 학습 효과가 올라간다. 컴퓨터구조도 나중에 정리할 생각이기는 하지만 진짜 너무 깔끔하고 이해하기 쉽게 정리해놓은 영상이 있어서 소개를 먼저 하겠다. 20분 정도 되는 분량이지만 꼭꼭꼭 끝까지 보기를 바란다. [ CPU는 어떻게 작동할까 ] 클릭! 위 영상을 다 봤다는 가정 하에 글을 쓰겠다. 만약에 글을 읽다가 생소한 용어가 있다면 위 영상을 꼭 시청하기를 바란다. 컴퓨터의 부속 장치들은 크게 연산장치와 기억장치로 분류할 수 있다. 연산장치로는 CPU, GPU 등이 있고..
[ 운영체제 ] Banker's Algorithm 데드락 해결 방법 중 회피(Avoidance)를 다루다가 Banker's Algorithm 내용이 길어져서 따로 정리한다. Banker's Algorithm은 자원의 인스턴스 개수가 두 개 이상일 때 사용할 수 있는 회피 방법이다. 이 알고리즘에서 사용하는 자료구조는 아래와 같고, 이는 이미 알고 있다는 가정 하에 시작한다. int n = number of Processes int m = number of Resource Types int Available[m] = 각 Resource Type 별로 이용 가능한 instance 개수 // Available[j] = k, R_j의 인스턴스 개수가 k 개라는 뜻 int Max[n][m] = 각 프로세스의(n) 자원별(m) 최대 요구 인스턴스 수 // Max[..

반응형