이전 글에서 Critical Section에서 동기화를 하기 위한 소프트웨어적인 해결 방법을 알아봤었다. Mutual Exclusion, Progress, Bounded Waiting 세가지 요구사항을 만족시켜야 Critical Section에 대한 문제를 해결할 수 있다. 이는 일종의 lock으로 볼 수 있는데, 이번 글에서는 하드웨어적으로 lock을 구현하는 방법에 대해 알아보자. Synchronization Hardware 하드웨어적으로 Critical Section 문제를 해결하기 위한 제일 간단한 방법은 비선점형 커널을 사용하는 것이다. 비선점형 커널을 사용하여 프로세스가 Critical Section안에 있을 때 interrupt되지 않게 하면 된다. 하지만 응답성이 나빠서 real-time ..
협력적(cooperating) process는 시스템 내에서 실행 중인 다른 process의 실행에 영향을 주거나 영향을 받는 process이다. 공유 데이터를 사용하는 process(예를 들면 thread)들이 공유 데이터에 동시에 접근한다면, 공유 데이터는 일관성을 유지할 수 없을 것이다. 이를 해결하기 위한 다양한 메커니즘이 있다. 1. Background동기화가 필요한 상황을 살펴보기 위해 생산자-소비자 문제를 예로 들자. 생산자와 소비자 코드는 아래와 같다. * Producer code item nextProduced; while( true ) { /* Produce an item and store it in nextProduced */ nextProduced = makeNewItem( . . ..
Real-time system은 task 처리에 걸리는 시간을 일관되게 유지할 수 있냐가 중요한 성능의 척도이다. Real-time system의 목표는 실시간 성능 보장에 있다. * Soft real-time systems: task 처리 시간이 달라지면 성능이 감소하는 경우 (streaming video 등) * Hard real-time systems: task 처리 시간이 달라지면 실패하는 경우 (자동차의 air-bag 등) 1. Minimizing LatencyReal-time system은 사건-중심의 특성을 가지고 있어서, 일이 발생하면 빠르게 처리되어야 한다. 따라서 Latency를 최소화 해야한다.Event Latency는 event가 발생하고 system이 응답하기까지의 시간이다. 아래..
이전 글인 Scheduling Algorithms에서 process scheduler를 다뤘다. process scheduler는 오직 kernel thread의 scheduling을 다룬다. 이번 글은 user thread가 어떻게 thread 라이브러리에 의해 kernel thread에 사상(mapping)되는지 살펴볼 것이다. (무슨 말인지 모르겠다면 Multi Thread Programming 글의 Multithreading Models 항목을 보자) 1. Contention ScopeMany-to-One, Many-to-Many 모델을 구현하는 시스템에서는 동일한 process에 속한 user thread들끼리 CPU를 경쟁하기 때문에 Process-Contention Scope(PCS)가 발생..
CPU scheduling은 short-term scheduler가 ready queue에 존재하는 process 중 어느 process에게 CPU를 할당할 것인지를 결정하는 문제를 다룬다. 이 과정은 process scheduler 또는 dispatcher에 의해 수행된다. 1. First-Come, First-Served Scheduling (FCFS)CPU를 먼저 요청하는 process가 CPU를 먼저 할당받는 scheduler이다. 따라서 선입선출(FIFO) queue로 쉽게 관리할 수 있다. FCFS Scheduling은 non-preemptive scheduler이기 때문에 시분할 시스템(대화형 시스템)에서는 사용하지 못한다.선입선처리 방식이기 때문에 구현하기는 쉽지만, process의 평균 ..
1. 기본 개념다중 프로그래밍의 목적은 CPU 이용률을 최대화하기 위해 항상 실행 중인 프로세스가 존재하도록 하는 것이다. 다중 프로그래밍을 달성하기 위해선 process를 CPU에 할당하는 작업인 Scheduling이 필수이다. 사실 process가 아니라 kernel thread를 scheduling 하는 것인데, 일반적으로 process scheduling과 thread scheduling은 같다고 여겨진다. 2. CPU-I/O burst cycleCPU가 수행되는 구간을 CPU burst, I/O때문에 block되는 구간을 I/O burst라고 한다. 아래 그림 1처럼, process는 CPU burst와 I/O burst의 cycle로 구성된다. CPU burst 크기가 크면 CPU intens..
1. 개요 Thread는 CPU 이용의 기본 단위이다. thread는 ID, program counter, set of registers, stack으로 구성된다. thread는 한 process 안에 여러개 존재할 수 있으며, 같은 process에 존재하는 다른 thread들과 OS의 자원을 공유한다. 아래 그림 1은 single thread process와 multi thread process의 차이를 보여준다. 위 그림과 같이 thread들은 code, file, data 등을 공유하지만 register와 stack은 각각 가지고 있다. 1.1 MotivationProcess는 여러 개의 독립된 작업들이 필요할 때 thread가 필요하다. 그림 1에서 봤듯이 thread는 여러 자원을 공유함으로써 ..
1. Context Switchinginterrupt가 발생하게 되면 운영체제는 프로세스에게 할당됐던 CPU를 가져와 kernel routine을 실행할 수 있도록 해야한다. 이 말은 프로세스가 일시적으로 중단됐다가 interrupt 처리가 끝난 후 프로세스가 작업했던 위치로 돌아와야 한다는 말이다. 이 때 프로세스가 작업했던 위치의 정보를 Context라고 하며 Context는 PCB에 포함된다. Context는 CPU register 값, 프로세스 상태(state), 메모리 관리 정보 등을 포함한다. (그림 1) CPU를 다른 프로세스로 교환하려면 현재 프로세스의 Context를 저장하고 다른 프로세스의 Context를 복구하는 작업이 필요하다. 이 작업을 Context Switch라고 부른다. Co..
- Total
- Today
- Yesterday
- Bin
- @Component
- nodejs
- Linux
- mybatis
- @Bean
- Barycentric coordinates
- @Autowired
- MySQL
- thymeleaf 변수 인식
- JavaScript
- @Qualifier
- spring batch
- spring
- Check point within polygon
- Closure
- thymeleaf cannot resolve
- 클로저
- Bean
- Express
- chunk
- Tasklet
- unity
- npm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |