CS/OS

[운영체제/OS] 여러가지 페이지 교체 정책에 대해

0. 들어가면서 지난 시간에 가상 메모리의 기본적인 개념에 대해 공부했고, 한정된 물리 메모리에 많은 양의 논리 메모리를 로드하기 위한 디맨드 페이징(Demand Paging) 전략에 대해 살펴봤습니다. 디맨드 페이징(Demand Paging)은 필요한 페이지만 물리 메모리에 올려두고, 물리 메모리에 가용한 공간이 없으면 스와핑(Swapping)을 통해 페이지를 교체하는 컨셉을 가진 방법이었습니다. [운영체제/OS] 메모리 관리 - 디맨드 페이징(Demand Paging)과 Page Fault Issue 💡 1. 리마인드 가상 메모리는 Virtual 또는 Logical Memory라고 부르는데, 이전에 메모리 관리를 공부하면서 사용해왔던 개념입니다. 멀티프로세싱 환경에서 각 프로세스는 자신의 가상 메모리..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 디맨드 페이징과 페이지 부재(Page Fault) Issue

💡 1. Remind 가상 메모리는 Virtual 또는 Logical Memory라고 부르는데, 이전에 메모리 관리를 공부하면서 사용해왔던 개념입니다. 멀티프로세싱 환경에서 각 프로세스는 자신의 가상 메모리 공간을 갖고 있고, 런타임에 물리적 메모리 공간에 올려서 사용하는 것이었죠. 가상 메모리 사용의 가장 핵심적인 목표는 프로그래머가 물리적 메모리 공간에 대해 신경쓰지 않고, 논리적 메모리에 대해서만 고민하게 하는 것입니다. 이를 위해 모든 가상 메모리는 통째로 물리적 메모리에 올려지는 것이 아니라, 공유 가능한 부분은 공유하고 / 실제 사용하는 영역만 물리 메모리에 올려집니다. 이를 통해 엄청나게 많고 커다란 프로세스들을 한정된 물리적 메모리 공간 안에서 돌아갈 수 있는 것이죠. 다시 말해, "RAM..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 세그멘테이션(Segmentation)과 페이징 기법

💡 0. 들어가면서 지난 글에서는 메모리 관리 기법 중 페이징 기법에 대해 공부했습니다. 페이징 기법은 논리적 메모리를 페이지 단위로 쪼개고, 물리적 메모리를 프레임 단위로 쪼개서 이를 대응하는 방식으로 연속적이지 않은 주소 공간의 매핑이 가능했습니다. 하지만 페이징 기법에서는 메모리 접근에 대한 오버헤드 문제와 커다란 페이지 테이블을 관리하는 메모리 이슈가 존재했고, 이를 해결하기 위한 TLB 레지스터와 Multi-level paging 등의 개념에 대해서 다루게 되었습니다. [운영체제/OS] 메모리 관리 - 페이징(Paging) 기법 📖 0. 들어가면서 지난 포스팅에서 공부한 Partitioning, Buddy system 등의 메모리 관리 기법은 프로세스의 논리적인 메모리 주소를 물리적인 메인 메모..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 페이징(Paging) 기법

📖 0. 들어가면서 지난 포스팅에서 공부한 Partitioning, Buddy system 등의 메모리 관리 기법은 프로세스의 논리적인 메모리 주소를 물리적인 메인 메모리에 연속적인 Mapping을 전제했습니다. [운영체제/OS] 메모리 관리 - 파티셔닝(Partitioning)과 버디 시스템(Buddy system) 이번 포스팅에서는 메모리 관리를 실전(?) 방법들에 대해서 공부하려고 합니다. 단, 지금부터 소개하는 방법들은 기본적으로 프로세스의 크기만큼 물리 메모리에 충분한 공간이 있음을 가정합 studyandwrite.tistory.com 하지만 지금부터 알아 볼 페이징(Paging) 기법은 물리적인 주소가 연속적이지 않은 상황에서도 매핑이 가능합니다. 어떤 방식인지 구체적으로 알아보도록 하겠습니다..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 파티셔닝과 버디 시스템(Buddy system)

이번 포스팅에서는 메모리 관리를 실전(?) 방법들에 대해서 공부하려고 합니다. 단, 지금부터 소개하는 방법들은 기본적으로 프로세스의 크기만큼 물리 메모리에 충분한 공간이 있음을 가정합니다. 이전 시간에 스와핑에 드는 Transfer time이 꽤 크다는 것을 이야기했었는데 지금은 이 부분을 고려하지 않겠다는 뜻입니다. 이전 포스팅을 아직 안 보신 분은 한 번 보고 오시면 이해가 더 편하실 것 같습니다. [운영체제/OS] 메모리 관리(Memory Management) - 물리적, 논리적 주소 공간과 스와핑(Swapping) 💡 0. 들어가면서 이전 포스팅까지 CPU 스케줄링, 멀티프로세싱과 멀티쓰레딩, 그리고 동기화 및 데드락 이슈에 대해 공부했습니다. 메모리 관리(Memory Management)는 하나..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 메모리 관리 - 물리적, 논리적 주소 공간과 스와핑(Swapping)

💡 0. 들어가면서 메모리 관리(Memory Management)는 하나의 물리적인(Physical) 메모리 공간에서 여러 개의 프로세스를 어떻게 돌릴 것인가에 대한 이야기인데요. 메모리 관리에 대해 공부하고 나면 아래 질문들에 대한 답을 할 수 있을 것 같습니다. - 여러개의 프로세스를 하나의 메인 메모리 상에서 어떻게 돌릴 것인가? - 프로세스마다 점유하고 있는 메모리 사이의 간섭을 어떻게 줄일 것인가? - 적은 오버헤드를 추구하면서 어떻게 하면 메모리 공간을 낭비없이 효율적으로 활용할 것인가? 우선 이번 포스팅에서는 메모리 관리를 이야기하기 위한 기본적인 개념과 용어를 공부해보겠습니다. 📖 1. 주소 공간(Address Spaces) 메모리 관리에 대해 공부하기 위해 먼저 '주소 공간(Address..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 데드락(Deadlock) 핸들링하기

0. 들어가면서 지난 시간에 데드락이란 무엇이며, 어떤 상황에서 발생할 수 있는지에 대한 필요조건에 대해 공부했습니다. 데드락이 발생하기 위한 필요조건 네 가지는 다음과 같았는데요. 1. 상호배제(Mutual Exclusion): Non-sharable한 resource가 존재해야 한다. 2. 점유대기(Hold and Wait): 프로세스는 Resource를 점유하고 있는 동시에 다른 프로세스가 들고 있는 Resource를 Wait하고 있다. 3. 비선점(No preemption): Resource는 자신을 점유하고있는 프로세스에 의해서만 release될 수 있다. 4. 순환대기(Circular wait): 2번 내용을 포함하고 있는데, 그래프에 Cycle이 있어야 한다는 것이다. 이 조건들을 설명하면서..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 데드락(Deadlock)의 개념과 발생조건

🧐 0. 들어가면서 이전 포스팅까지 동기화(Synchronization) 이슈에 대해 공부했습니다. 동기화 이슈는 단일프로세서나 멀티프로세서 모두 일어날 수 있는 이슈였는데, 유저모드와 커널모드에서 System call의 리소스에 대한 중복 호출이나, Interrupt Handler가 접근하는 리소스가 중복되는 등의 문제로부터 야기될 수 있었습니다. 이번 시간부터 공부 할 데드락(Deadlock) 문제는 Multiple Process에서의 교착 상태 문제를 다루는 것입니다. 동기화 이슈와 약간 비슷한 느낌으로 사용할 수 있는 자원은 정해져있는데, 이 자원을 사용하고 싶은 다수의 프로세스가 존재할 때 발생하죠. 1. 데드락의 발생 상황 A set of blocked processes each holding..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 동기화 이슈 처리하기 - (1)

💡 0. 문제 상황 // Producer = 데이터를 추가하는 역할(counter 증가) register A := counter; // load register A := registerA + 1; // add counter := registerA; // store // Consumer = 데이터를 빼는(소모하는) 역할(counter 감소) registerB := counter; // load reigsterB := registerB - 1; // sub counter := registerB; // store 위 코드에서 counter라는 변수가 공유 변수라면 Register A, B가 동시에 counter 변수를 사용했을 때 결과값이 모호해지는 현상이 발생했습니다. 그리고, 이를 해결하기 위해 이전 시간..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 동기화 이슈의 원인과 임계 구역(Critical Section)의 개념

0. 들어가면서 동기화(Synchronization)는 사전적 의미로 시스템을 동시에 작동시키기 위해 여러 사건들을 조화시키는 것을 뜻합니다. 이전에 멀티프로세싱과 멀티쓰레딩에 대해서 공부했는데, 동기화 이슈는 이러한 멀티태스킹 환경에서 정말 중요한 역할을 합니다. 1. 동기화는 왜 필요한가? 멀티쓰레딩에 대해 공부했을 때를 떠올려보겠습니다. 멀티쓰레딩이란 기본적으로 프로세스 이미지를 공유 가능한 부분과 공유 가능하지 않은 부분으로 나눠서 공유 가능한 부분을 Thread란 개념으로 나눈 개념이었습니다. 그런데 공유 데이터(Global Data)에 대해 아무런 통제를 해주지 않을 때, 어떤 프로세스나 쓰레드가 이 데이터를 읽고 쓰고 있는 상황에서 다른 녀석이 들어와서 읽고 쓰게 되버릴 수 있고 그렇게 되면..

2021.06.14 게시됨