OS(9)
-
[OS] 8. 가상 메모리
시스템 내부에서는 "여러 프로세스들"이 CPU와 메인 메모리 등의 자원을 공유한다. CPU를 공유하는 부분에 대해서는 단지 어느 프로세스에게 할당해주고 & 이 과정에서 Context Switch가 발생하고 & .... 이러한 것들은 Response Time이나 이러한 시간적 측면에서 느려질 뿐, 시스템에 심각한 오류가 발생하지는 않는다 반면에 여러 프로세스들이 공유하는 "메인 메모리"는 다르다 각 프로세스들이 메인 메모리에 예전 방식으로는 Contiguous하게 올라갈 수도 있고, 아니면 고정 크기로 분할한 Paging 기법을 사용해서 올라갈 수도 있고, 의미있는 가변 크기로 분할한 Segmentation 기법을 사용해서 올라갈 수도 있다. 여기서 각 프로세스들은 본인에게 할당된 영역만 access해야 ..
2022.06.04 -
[OS] 7. 메모리 관리
Memory 컴퓨터 시스템에서 메모리는 굉장히 중요한 하드웨어이다. 디스크에 존재하는 프로그램은 OS에 의해서 메인 메모리로 올라가게 되고, 스케줄링에 의해서 CPU를 할당받고 실행이 된다 이 때 CPU는 "해당 프로세스의 주소"를 통해서 프로세스에 접근할 수 있다 CPU가 직접 Access 가능한 것은 메인 메모리 & CPU 내부 레지스터이다 Logical Address Logical Address란 "CPU가 보는 프로세스의 주소"이다 프로세스마다 독립적으로 보유하는 주소 공간이고 당연히 프로세스 입장에서는 0번지부터 시작된다 Physical Address Physical Address는 "프로세스가 실제 메인 메모리에 올라가는 위치"를 의미한다 따라서 CPU가 프로세스에 access하려면 CPU가 ..
2022.05.21 -
[OS] 6. Deadlock
각 프로세스들이 자원을 보유한 상태에서 "서로 다른 프로세스의 자원을 요구함"에 따라서 Reqeust한 프로세스들이 Block되는 현상을 "Deadlock이 발생했다"라고 한다 한마디로 본인 자원은 내놓지 않으면서 다른이의 자원만 요구해서 결국 block되는 경우이다 이러한 Deadlock은 어떤 프로세스의 희생이 있다면 결코 발생하지 않을 것이다 "Deadlock 프로세스 집합"은 다른 의미로 "자원을 Hold한 상태로 Block된 프로세스들의 집합"이라고 할 수 있다 ## P0 ## wait(A); wait(B); ## P1 ## wait(B); wait(A); 대표적인 Deadlock의 예이다 P0는 wait(A)를 통해서 자원 A를 갖게 되었고, P1은 wait(B)를 통해서 자원 B를 갖게 되었..
2022.04.23 -
[OS] 5-3. 여러가지 동기화 문제들
1) Bounded-Buffer Problem 크기가 N인 Buffer가 존재 Producer : Buffer(N)에 데이터 저장 Consumer : Buffer(N)으로부터 데이터 읽기 $ 공유 자원 Buffer $ Semaphore Semaphore mutex = 1 :: Binary Semaphore & buffer에 대한 lock Semaphore empty = N :: Counting Semaphore Semaphore full = 0 :: Counting Semaphore empty, full이 Counting Semaphore인 이유는 buffer내부에 empty buffer & full buffer가 여러개 존재하기 때문 만약에 Binary Semaphore로 구현한다면 Producer는 ..
2022.04.17 -
[OS] 5-2. Mutex Lock & Semaphore & Monitor
이전에 Critical Section 문제에 대한 해결책으로 "하드웨어적 프로세스 동기화"를 설명했다. 하드웨어 기반 해결책은 매우 복잡하고 응용 프로그래머가 쉽게 사용할 수가 없다. 이러한 문제를 위해 OS에서는 몇가지의 소프트웨어 도구들을 개발했다 Mutex Lock Semaphore Monitor 1. Mutex Lock mutex는 사실 "Mutual Exclusion"의 축약 형태이다. "Mutual Exclusion"이란 'Critical Section에는 오직 하나의 프로세스만 들어갈 수 있고 Critical Section에 이미 프로세스가 존재한다면 나머지 프로세스들은 Critical Section에 접근할 수 없다'라는 Critical Section 해결 조건 중 하나이다 Mutex Lo..
2022.04.11 -
[OS] 5-1. 프로세스 동기화
협력적 프로세스는 시스템 내에서 실행 중인 다른 프로세스에게 영향을 주거나 영향을 미칠 수 있다. Shared Memory라는 개념이 존재하기 때문이다 만약 두 프로세스가 공유 데이터를 동시에 접근한다면?? 어떠한 과정에 의해서 데이터의 일관성을 해칠 수도 있다. Producer-Consumer Problem에 어떠한 조건들을 추가해보자 1. "count" 변수 설정 Producer는 생산할 때마다 count++ Consumer는 소비할 때마다 count-- 2. Producer-Consumer 사이의 공유 버퍼를 유한하게 만들기 ## Producer Code ## while(true){ while(count == BUFFER_SIZE){ /* can't produce */ } buffer[in] = n..
2022.04.04 -
[OS] 4. CPU 스케줄링
다중 프로그래밍의 목적은 "CPU를 항상 바쁘게 하자"이다. 반드시 여러 프로세스들 중 하나의 프로세스에게는 CPU가 할당되어야 하고, 해당 프로세스가 I/O 요청을 기다리면 "context switch"를 통해서 다른 프로세스에게 CPU를 할당해줘야 한다. >> 이 때 필요한 기술이 CPU 스케줄링이다. 프로세스의 실행은 CPU burst - I/O burst 사이를 교대로 왔다 갔다 하며 수행된다 마지막 CPU burst에는 또 다른 I/O burst가 뒤따르는 대신, 실행을 종료하기 위한 시스템 요청과 함께 끝난다 "CPU Bound Process"는 CPU burst time이 굉장히 긴 프로세스이고, I/O burst time은 굉장히 짧기 때문에 user와 interactive하지 않은 bat..
2022.04.01 -
[OS] 3. 스레드
"거의 모든 현재 OS는 한 프로세스가 다중 스레드를 포함하는 특성을 제공한다" 스레드? 프로세스는 현재 실행중인 프로그램들이다. 그러면 스레드는? "스레드는 CPU 이용의 기본 단위이다" , "프로세스 내부에서 실제로 작업을 수행하는 주체" ??? 동일한 일을 수행하는데 여러개의 프로세스를 통해서 수행하면 각 프로세스마다 별도의 주소공간이 생성됨에 따라 메모리가 낭비되고 자원을 관리해주는 OS의 입장에서도 굉장히 힘들 것이다. >> 그래서 동일한 일을 수행하는데 일단 프로세스는 하나만 생성해주고, 해당 프로세스안에 여러개의 스레드를 통해서 일을 나누어서 동시에 작업을 수행하면 더 효율적이다 하나의 프로세스 내에서 여러 개의 실행 흐름(단일 / 동시 / 병렬)을 두어서 작업을 효율적으로 처리 하나의 프로..
2022.03.26 -
[OS] 1. 컴퓨터시스템 구조
OS (Operating System) - 주어진 자원으로 최대한의 효율을 내도록 자원 관리 - 형평성 있는 자원 분배 : 프로세스가 CPU 독점하지 않도록 좁은 의미의 OS : kernel - 메모리에 항상 상주하는 부분 - OS의 핵심 넓은 의미의 OS : Kernel + 각종 Utility - Utility는 메모리에 상주하지 않고, 필요할 때만 메모리에 올라간다 OS의 분류 동시 작업 가능 여부 1) 단일 작업 (Single Tasking) MS-DOS : 하나의 프로그램만 메모리에 올려서 수행 & 한번에 하나의 작업만 처리 2) 다중 작업 (Multi Tasking) UNIX(Linux) & MS Windows : 여러 프로그램들을 메모리에 올려서 동시에 2개 이상의 작업 처리 이 과정에서도 각..
2022.03.21