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 게시됨

CS/OS

[운영체제/OS] CPU 스케쥴링 - (3)

0. 들어가면서 지난 시간에는 FCFS, RR, SJF 스케줄링 기법에 대해 공부했습니다. 그리고 그 중에서 SJF 스케줄링은 Expected burst time이 가장 작은 작업에 우선순위를 높게 할당하는 방식이라고 설명했는데요. 이번 글은 어떻게 burst time을 추정해야 하는가에 대해 이야기하는 것으로 시작하려고 합니다. 1. CPU Burst time 추정의 한계 CPU burst time을 측정을 위해서는 과거에 이 프로세스가 CPU를 사용했던 시간 기록을 이용하는데요. CPU burst time을 측정하는 크게 두 가지 방법이 있습니다. Simple Average : 이 프로세스의 과거 CPU 사용 시간들에 대해 동일한 Weight를 주는 방식으로 평균값을 구한다. Exponential A..

2021.06.14 게시됨

CS/OS

[운영체제/OS] CPU 스케쥴링 - (2)

0. 들어가면서 지난 글에서는 CPU 스케줄링 정책은 Selection Function과 Decision Mode라는 두 가지 관점에서 설계된다는 것을 보았고, Preemptive, NonPreemptive, Prorirty 등의 개념에 대해 공부했습니다. [운영체제/OS] CPU 스케쥴링 - (1) 1. 들어가면서 CPU 스케줄링은 어떤 프로세스를 어느 시간동안 실행시킬 것인가를 결정하는 과정이라고 생각할 수 있습니다. 스케줄링을 공부하기 이전에 두 가지 용어를 우선 정의하면 좋을 것 studyandwrite.tistory.com 이번 시간에는 여러 가지 CPU 스케줄링 기법들을 하나하나 살펴보고 각 스케줄링 방법의 특징과 장단점들에 대해서 알아보겠습니다. 1. FCFS Scheduling FCFS S..

2021.06.14 게시됨

CS/OS

[운영체제/OS] CPU 스케쥴링 - (1)

1. 들어가면서 CPU 스케줄링은 어떤 프로세스를 어느 시간동안 실행시킬 것인가를 결정하는 과정이라고 생각할 수 있습니다. 스케줄링을 공부하기 이전에 두 가지 용어를 우선 정의하면 좋을 것 같은데요. Nonpreemptive scheduling : 이미 할당된 자원을 다른 프로세스가 빼앗을 수 없는 방식 Preemptive scheduling : Time slice가 소진되었거나 I/O Interrupt, system call 등이 발생하면 현 실행 프로세스로부터 강제로 CPU를 회수하여 프로세스를 스위칭하는 방식 이 두 가지 용어는 앞으로 정말 많이 나올 예정이니, 헷갈리지 않게 잘 알아두면 좋을 것 같습니다. 헌편, 예전에 프로세스의 다섯 가지 상태에 대해서 글을 썼을 때 참고한 그림이 있었습니다. ..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 멀티쓰레드 구현해보기

1. 멀티쓰레드의 타입 이전 글에서 프로세스 모델과 쓰레드 모델의 차이를 설명했습니다. 프로세스 모델은 각 프로세스 안에 모든 Image와 Context들을 담고 있기 때문에 무거우며, 새로운 프로세스를 만들 때마다 fork()를 수행하기 때문에 모든 내용을 복제하는 메모리 상의 비효율성과 시간적 비효율성을 초래한다고 했죠. 그리고 이러한 맥락에서 Thread를 사용하게 되면 쓰레드를 생성하는 데 시간도 적게 걸리며 요청을 병렬적으로 처리할 수 있기 때문에 효율성을 확보할 수 있다고 했습니다. 그렇다면 실제로 멀티쓰레딩은 어떻게 구현할까요? 이에 대해서는 크게 두 가지 방법이 있는데, 아래 그림을 보도록 하겠습니다. 1) User-level Threading 왼쪽 그림이 User-level Thread를..

2021.06.14 게시됨