본문 바로가기

반응형

CS/운영체제

(25)
[ 운영체제 ] 경쟁상태(Race Condition)와 동기화(Synchronization)의 필요성, 임계 구역(Critical Section) Race Condition이란, 여러 개의 프로세스가 공유 자원에 동시 접근할 때 실행 순서에 따라 결과값이 달라질 수 있는 현상이다. 이 한 문장이 race condition에 대한 모든 것이다. Race condition을 번역하면 '경쟁 상태'라고 한다. 영어 쓰기가 귀찮아서 앞으로 경쟁 상태로 부르도록 하겠다. 경쟁 상태는 컴퓨터 입장에서 아주 큰 문제다. 왜 큰 문제냐? 똑같은 코드를 100번 돌리면 실행 결과가 항상 같아야 하는데, 경쟁 상태가 발생하면 결과가 달라질 수 있기 때문이다. 이러한 문제를 방지하기 위해 공유 메모리를 쓰는 프로세스끼리 '동기화'를 해줘야 한다. 정리하면 공유 메모리를 쓰는 프로세스끼리는 경쟁상태가 발생할 수 있는데, 이에 대한 해결책이 동기화다. Race Condi..
[ 운영체제 ] CPU Burst Prediction CPU 스케줄링 알고리즘 중 SJF 또는 SRTF는 CPU Burst Time 값을 통해 CPU를 할당할 프로세스를 결정한다. 그런데 어떤 프로세스의CPU Burst Time은 CPU에 직접 돌리기 전까지 알 방법이 없다. 그래서 CPU 스케줄링에 사용되는 CPU Burst Time은 실제값이 아닌 예측값이다. 이번 글은 CPU Burst Time을 예측하는 방법에 대한 글이다. CPU Burst Time은 편의상 CBT라고 하겠다. CBT를 예측하는 방법에는 크게 Static한 방법과 Dynamic한 방법이 있다. Static한 방법은 말 그대로 상수처럼 미리 정해놓은 값을 기반으로 예측하는 방법이고, Dynamic한 방법은 유동적인 예측 방법이다. 1. Static Method [1] Process ..
[ 운영체제 ] 프로세스 스케줄링(Process Scheduling) 💡 이번 글에서 (프로세스, 쓰레드, Job, Task)스케줄링을 혼용해서 쓴다! 💡 Basic Concept CPU 스케줄링이란, ready 큐에 있는 프로세스 중 누구에게 CPU를 할당할 것인지 결정하는 알고리즘이다. 먼저, 이번 글에서 자주 쓰이는 용어에 대한 정리를 하겠다. CPU 스케줄러 : 프로세스 스케줄링을 수행하는 운영체제의 컴포넌트 모듈이다. 커널 안에 있는 알고리즘(코드)로 봐도 무방. Dispatch(er) : 스케줄러 안에 있는 모듈 중 하나로, 스케줄러에 의해 선택된 쓰레드에게 CPU를 할당하는 행위. CPU burst : CPU만 사용. ex) CPU burst time 작업 시작부터 종료까지 순수하게 CPU만 사용하는 시간. CPU bound : CPU를 많이 사용한다는 뜻. ..
[ 운영체제 ] 쓰레드(Thread) Thread 등장 배경 쓰레드는 프로세스의 단점을 보완한 새로운 실행 단위다. 사실 이전에 프로세스가 CPU의 실행 단위라고 했는데 사실은 쓰레드가 맞다. 이전까지는 엄밀히 말해서 '단일 쓰레드'라고 할 수 있다. 프로세스의 치명적인 단점은 fork()를 할 때 자식 프로세스에게 code~stack까지의 모든 메모리 공간을 새롭게 할당한다는 점이다. 이는 심각한 메모리 낭비다. 이해하기 쉽게 그림으로 알아보자. 위 그림과 같이 fork()에 의해 생성된 프로세스는 모두 새로운 메모리 공간을 할당받았다. 그런데 크롬창 네 개를 실행시키는 경우를 생각해보자. 같은 프로그램이기 때문에 비슷한 부분이 상당히 많을 것이다. 어떤 부분이 같고, 어떤 부분이 다를까? 그렇다.. 사실 stack 부분만 달라도 상관 없..
[ 운영체제 ] 프로세스간 통신, IPC (Interprocess Communication) 프로세스는 서로 데이터를 주고 받을 일이 많다. 대표적으로 PPT 파일을 인쇄하는 과정을 생각해 보자. PPT 프로세스는 인쇄할 데이터를 프린터 프로세스에게 전송해주고, 프린터 프로세스는 전송 받은 데이터를 가지고 출력을 하면 된다. 물론 자세하게 들어가면 훨씬 복잡한 과정이지만 일단 이렇게 알아두자. '데이터를 전송한다'의 의미를 메모리 관점에서 다시 생각해보자. 메모리의 크기는 한정적이기 때문에 프로세스가 차지하는 공간도 한정적이다. 프로세스 A가 프로세스 B에게 데이터를 전송한다는 것은 프로세스 A가 프로세스 B의 메모리 공간에 접근한다는 뜻이다. 그런데 이는 굉장히 위험한 행동(?)이다. 만약에 전송하는 데이터의 크기가 프로세스 B의 데이터 공간을 넘어선다면? 프로세스 B에 오류가 발생할 것이다...
[ 운영체제 ] 프로세스는 누가 생성하고, 어떻게 생성될까? 프로세스는 누가, 어떻게 만드는 걸까? 우리는 프로세스에 대해 공부하면서 위와 같은 질문을 아직 하지 않았다. 딱히 의심도 하지 않았던 것 같다. 교수님께서 위와 같은 질문을 했을 때 '헐..그러네' 라는 생각을 했었던 기억이 난다. 그러면 바로 본론으로 들어가자. 프로세스는 과연 누가 만드는 것일까? 1. Who? 정답부터 말하자면 프로세스는 부모 프로세스로부터 생성된다. 따라서 모든 프로세스는 부모 프로세스를 가진다. 부모와 자식 관계이기 때문에 OS는 프로세스를 트리 자료구조로 관리한다. 모든 프로세스는 PID라는 고유 식별자를 가진다. PID는 PCB에 저장되어 있다. 그렇다면 태초의 프로세스, 그러니깐 모든 프로세스의 조상 프로세스는 어떻게 생성될까? 태초의 프로세스는 OS 입장에서 매우 중요하..
[ 운영체제 ] 프로세스의 상태, Context Switch 프로세스는 커널의 PCB에 의해 관리된다. PCB 안에는 프로세스에 관한 정보들이 저장되어 있는데, '상태' 정보가 그 중 하나다. 상태의 종류를 알아보기 전에 상태 정보를 저장하는 이유를 한번 생각해보자. 우리는 운영체제를 배우면서 늘 두 가지 사실을 기억하고 있어야 한다. 1. CPU는 한 가지 일(프로세스)만 처리할 수 있다! 2. 컴퓨터는 고철 덩어리에 불과하다(근데 반도체를 곁들인). 마법처럼 짠! 하는 일은 없다. 물론 요즘에는 성능이 좋은 CPU가 많이 나와서 여러 개의 프로세스를 동시에 처리할 수 있지만 사실 그것도 여러개의 CPU를 하나의 CPU처럼 보이게 만들어 놓은 것에 불과하다. 하나의 칩에는 한 가지 일만 수행할 수 있다. 이러한 문제 때문에 '상태' 정보가 필요하다. CPU를 최..
[ 운영체제 ] Dual-Mode Operation(커널 모드, 사용자 모드) 메인 메모리는 커널 영역과 사용자 영역으로 구분된다. 이 둘은 같은 공간을 공유하고 있으므로 자칫하면 사용자 영역이 커널 영역을 침범할 수 있다. 이러한 침범 문제를 방지하기 위해 하드웨어의 도움이 필요하다. ​ CPU에는 Mode bit라는 것이 존재한다. Mode bit 값에 따라 커널 모드와 사용자 모드로 구분되는데, 커널 모드는 모든 메모리에 접근 가능하지만 사용자 모드는 오직 사용자 영역에만 접근 불가능하다. 하드웨어적으로 아예 분리를 시켜놨기 때문에 사용자 영역이 커널 영역을 침범하는 일은 없다. 한편, 사용자 모드에서는 실행 가능한 명령이 매우 한정적이다. 컴퓨터를 할때 대부분이 커널 모드로 동작한다고 봐도 무방하다. 그렇다면 사용자 모드에서 커널 모드로의 전환은 어떻게 이루어질까? 이는 인..

반응형