CS/운영체제(OS) 10

Monitor란?

Monitor란? 프로세스 동기화를 구현하기 위해서 semaphore를 사용하는 것에는 몇 가지 문제가 있다. 우선 코딩하기가 쉽지 않고, 정확하게 작동한다는 것을 입증하기가 어렵다. 또한 한 번의 실수가 모든 시스템에 치명적인 영향을 미친다. V와 P의 순서를 바꾸어 쓰거나 P만 2번 쓴 경우 mutual exclusion이 깨지거나 deadlock 문제가 생길 수 있다. 이러한 문제를 해결하기 위해 사용하는 것이 Monitor이다. Monitor란 객체단위로 구성된 프로그램으로, 공유 데이터 멤버 변수와 그 변수들을 조작할 수 있는 함수들을 포함하고 있다. 모니터 내에서는 한 번에 하나의 프로세스만이 활동 가능하도록 구현되어 있어서 semaphore를 이용할 때처럼 직접 동기화 제약 조건을 명시적으로..

CS/운영체제(OS) 2022.05.10

Race Condition과 프로세스 동기화(Process Synchronization)

Race Condition이란? Race condition이란 여러 프로세스들이 동시에 공유 데이터에 접근하는 상황을 말한다. 데이터 최종 연산 결과가 마지막에 어떤 프로세스가 데이터를 다루냐에 따라 달라지기 때문에 문제가 된다. 이를 막기 위해서 동시에 실행되는 프로세스들은 동기화되어야 한다. OS에서 Race condition이 발생하는 경우 OS에서 race condition이 발생하는 경우는 크게 3가지가 있다. 1. 커널 수행 중 인터럽트가 발생한 경우 커널모드가 running하고 있을 때 interrupt가 발생하여 인터럽트 처리 루틴이 수행되면 둘다 커널 코드이므로 커널 주소 공간을 공유하게 되어 race condition이 발생한다. 2. 프로세스가 시스템콜을 하여 커널 모드로 수행 중인데..

CS/운영체제(OS) 2022.04.24

CPU 스케줄링 : CPU 스케줄러와 CPU 스케줄링 알고리즘들

CPU 스케줄링 CPU 스케줄링이란 어떤 프로세스에게 CPU를 할당을 해줄 것인지 정하는 것이다. CPU와 I/O 장치 등의 시스템 자원을 골고루 효율적으로 사용하기 위해서 CPU 스케줄링이 필요하다. CPU Scheduler가 Ready 상태에 프로세스 중에서 이번에 CPU를 줄 프로세스를 선택하면, Dispatcher가 그 프로세스에게 CPU 제어권을 넘기며 이 과정을 문맥 교환, context switch라고 한다. 스케줄링을 위한 큐와 스케줄러 프로세스를 스케줄링하기 위한 큐에는 세 가지가 있다. 프로세스들은 각 큐들을 오가며 수행된다. 1. Job queue : 현재 시스템 내에 있는 모든 프로세스의 집합 2. Ready queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리..

CS/운영체제(OS) 2022.04.23

프로세스 관리 : 프로세스 생성과 종료, 부모 프로세스와 자식 프로세스

프로세스 생성 시스템이 부팅된 후 최초로 생성되는 프로세스는 운영체제가 직접 생성하지만, 그 이후에는 이미 존재하는 프로세스를 복제하여 다른 프로세스를 생성하게 된다. 이때 새로운 프로세스를 생성하는 기존 프로세스를 부모 프로세스라고 하고, 새로 생성되는 프로세스를 자식 프로세스라고 한다. 프로세스는 전체적으로 트리의 계층 구조를 형성한다. 프로세스는 자원을 필요로 하는데 이 자원을 운영체제로부터 받을 수도 있고 부모 프로세스와 공유할 수도 있다. 부모와 자식 간의 자원 공유는 크게 3가지로 나눠진다. 1. 부모와 자식이 모든 자원을 공유하는 모델 2. 일부만을 공유하는 모델 3. 자원을 전혀 공유하지 않는 모델 대부분의 경우 3번에 속하며, 프로세스 부모와 자식 프로세스의 수행 방식 또한 두 가지로 나..

CS/운영체제(OS) 2022.04.21

스레드(Thread)란? : 프로세스와의 비교

스레드(Thread)란? 스레드란 light weight process라고 불릴 정도로 프로세스와 유사한 개념이다. 이전 글에서 프로세스는 프로그램을 실행시켜서 메모리에 로드한 것이라고 설명한 바 있다. 운영체제로부터 메모리와 CPU 등의 자원을 할당받을 때에는 이렇게 프로세스를 기준으로 할당을 받는다. 스레드는 프로세스를 기준으로 할당받은 자원을 CPU가 실제로 이용하는 것의 기본 단위다. 즉, 프로세스 안에 스레드를 여러 개 두어서 프로세스 단위로 할당받은 자원을 이용해 CPU가 작업을 할 때 스레드 단위로 나누어 처리하도록 할 수 있는 것이다. 이런 이유로 스레드를 light weight process라고도 하는 것이며, 전통적인 개념의 heavyweight process는 단 하나의 스레드로 이루..

CS/운영체제(OS) 2022.04.20

프로세스와 프로세스 문맥, 문맥 교환(Context Switch)

프로세스란? 프로세스란 프로그램을 실행시켜 메모리에 로드한 것으로, 다르게 말하면 프로세스는 곧 살아 움직이는 프로그램이라고 할 수 있다. 프로세스 문맥이란? 프로세스 문맥, 프로세스 컨텍스트란 프로세스를 설명하는 다양한 실행 정보들이다. 프로세스 컨텍스트에는 다음과 같은 것들이 해당된다. 1. 하드웨어 문맥 CPU 수행 상태를 나타내는 하드웨어 문맥은, Program counter(프로그램 코드 중 몇 번째 라인을 수행하고 있는지)와 프로그램 실행 시에 사용되는 data들을 저장하고 있는 각종 레지스터를 포함한다. 2. 프로세스 주소 공간 code 영역, data 영역 그리고 stack 영역으로 구성된 프로세스의 개별적인 주소 공간을 의미한다. 프로세스 주소 공간에 대한 자세한 설명은 여기를 참고하자...

CS/운영체제(OS) 2022.04.19

프로세스 주소 공간 : Stack, Data, Code

파일을 실행시키면 메모리에 프로세스가 로딩된다. 프로세스가 로딩된다는 건, 메모리에 프로세스 Address space가 할당되는 것인데 프로세스의 address space는 stack 영역과 data 영역, code 영역으로 나뉜다. Code 영역 ▷ 프로그램 컴파일 코드가 저장된다. ▷ 프로그램의 코드는 바뀌어서는 안 되기 때문에 읽기만 가능하다. ▷ 실행 파일을 구성하는 유저 모드에서 작동하는 사용자 정의 함수와 유저 라이브러리 함수 코드뿐 아니라 제어문과 상수 등이 포함된다. Data 영역 ▷ 프로그램의 static data와 global variable이 저장된다. ▷ 프로그램이 시작할 때 함께 할당되며 프로그램이 종료되면 소멸한다. ▷ 실행 과정에서 변수값이 충분히 변할 수 있으므로 읽기와 쓰기..

CS/운영체제(OS) 2022.04.19

동기식 입출력과 비동기식 입출력

동기식 입출력 (Synchronous I/O) 동기식 입출력 방식에서는 I/O 요청 후 I/O 작업이 완료된 후에야 제어권이 유저 프로그램으로 넘어간다. 구현 방법 동기식 입출력은 두 가지 방식으로 구현이 가능하다. 1. I/O 작업이 끝날 때까지 CPU를 유휴상태로 낭비시킨다. 이렇게 할 경우 한 번에 하나의 I/O 작업만 일어날 수 있다. 2. I/O 작업이 끝날 때까지 I/O 요청을 한 프로그램에게서 CPU를 빼앗는다. I/O 처리를 기다리는 대기큐에 해당 프로그램을 추가하고 CPU는 다른 프로그램에게 넘긴다. 비동기식 입출력 (Asynchronous I/O) 비동기식 입출력 방식에서는 I/O 작업이 시작된 후에 해당 작업이 끝나기를 기다리지 않고 제어권이 I/O 요청을 한 프로그램에게 즉시 넘어간..

CS/운영체제(OS) 2022.04.18

운영체제의 이중연산모드 : 유저 모드, 커널 모드

두 가지 모드가 존재하는 이유 유저 프로그램을 잘못 수행해서 다른 프로그램이나 운영체제 자체에 피해가 생기는 걸 방지하기 위해 보호 장치를 해둔 것이라고 보면 된다. 두 가지 모드의 구분 1. 유저 모드 : 유저 프로그램을 실행한다. 시스템 데이터에 접근이 제한되며 하드웨어에 직접 접근할 수 없다. 2. 커널 모드 : 모니터 모드라고도 하며 OS 코드나 커널 모드 코드를 실행한다. 보안을 해칠 수 있는 중요한 명령어는 커널 모드에서만 수행 가능한 '특권명령'으로 규정된다. 모든 I/O 명령은 특권 명령이다. Mode bit 하드웨어적으로 구현된 두 가지 모드의 연산을 지원하기 위해 쓰이는 비트다. 1은 유저 모드, 0은 커널 모드를 나타낸다. Interrupt나 Exception이 발생하면 하드웨어가 m..

CS/운영체제(OS) 2022.04.18

운영체제 개념, 기능: 인터럽트, CPU 스케줄링, 메모리 관리, 디스크 스케줄링

운영체제란? 운영체제란 하드웨어 바로 위에 설치되어 사용자나 다른 모든 소프트웨어와 하드웨어를 연결해주는 역할을 하는 소프트웨어 계층이다. 좁게는 컴퓨터 메모리에 상주하는 커널을 의미하며, 넓게는 커널과 각종 시스템 유틸리티를 포함한 개념이다. 운영체제의 목적 - 직접 다루기 복잡한 하드웨어를 대신 다루어 주어서 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다. - 컴퓨터 시스템의 자원(CPU, 메모리, I/O 장치 등)을 효율적으로 관리한다. 운영체제의 기능 1. 인터럽트 처리가 빠른 CPU와 느린 I/O 장치(키보드, 프린트 등) 간 속도 차이를 조절한다. 인터럽트가 들어오면 운영체제가 CPU를 제어한다. 즉, 운영체제로 CPU 제어권이 이양되는 것이다. - 타이머 인터럽트 프로세스들에게 C..

CS/운영체제(OS) 2022.04.17