학교생활/운영체제 16

[운영체제] Ch6(2)

HW적 솔루션은 이용이 어렵고 실수했을 시 문제가 일어나기 때문에 접근하기 쉬운 API를 사용해보자. API는 OS마다 함수 이름은 틀림 Mutex Locks 들어갈때는 acquire(), 나올때는 release() acquire()를 할려고 하는데 CS를 누가 사용하고 있으면 busy waiting을 한다. --busy waiting: acquire()를 해도 되는지 계속 확인한다.(ready 상태 반복)[spinlock] HW에서 제공사는 test-and-set과 compare-and-swap을 이용해서 acquire()와 release()를 구현하면 된다. Semaphores Mutex보다 상위개념 한 프로세스가 다른 프로세스에게 이벤트가 일어났다는 것을 알릴 때 사용할 수도 있다. Semaphor..

[운영체제] Ch6(1) Race condition & CS Problem & Peterson's Solution

Race Condition: 같은 프로그램을 수행하는데 결과가 상대적인 속도에 따라 다르게 나오는 것. 예시: Producer-Consumer problem [설명] counter++가 모두 수행 된 후 counter--가 수행되어야지(혹은 반대) counter값이 둘 다 똑같이 5가 된다. (기대한 결과) 하지만 예제처럼 동시에 수행하면서 실행이 뒤섞인다면 counter는 각각 6과 4과 되면서 동기화가 되지 않는다. The Critical-Section Problem race condition을 방지하기 위해 CS를 잘 보호해야 한다. CS: 민감한 정보에 두개 이상의 프로세스가 접근해서 동시에 정보를 변경하면 문제가 생기는 부분. [해결 방법의 조건] 1. Mutual Exclusion(상호배제):..

[운영체제] Ch5(3)Real-Time Cpu scheduling & Operating Systems Examples

Real-Time Cpu scheduling : deadline안에만 수행하면 성능이 100%인 것.(빨리 응답을 한다고 해서 성능이 더 좋은 건 아님) Soft real-time systems: deadline을 넘기면 성능은 급격히 떨어지지만 사용은 가능(영상 등) Hard real-time systems: deadline을 넘기면 성능은 0%(항공기 제어 등) Event latency 어떠한 일을 하는데 걸리는 시간 Interrupt latency: Interrupt가 와서부터 Interrupt Service routine을 시작하기까지 걸리는 시간. dispatch latency: [low-level process가 access하던 자원을 high level process가 기다려야 하는 시간] ..

[운영체제] Ch5(2) Thread Scheduling & Multi-processor scheduling

Thread Scheduling many-to-one이나, many-to-many모델에서는, kernel thread가 어떤 user thread에게 LWP를 할당(맵핑)할지 정해야 한다. PCS, SCS: kernel thread가 어떤 user thread에게 LWP를 할당(맵핑)할지 정하는 것. Process-contention scope(PCS): 한 프로세스에서 경쟁 system-contention scpoe(SCS): 모든 시스템에서 경쟁 Multiple-Processor Scheduling Multiple processor: 한 컴퓨터 안에 CPU가 많다는 것 Multi-core: 한 CPU안에 core가 많다는 것 Mulththreaded cores: 한 core안에 하드웨어적인 threa..

[운영체제] Ch5(1) Scheduling Criteria & Scheduling Algorithms

개요 CPU burst: cpu가 일을 하는 시간 I/O burst: I/O를 기다리는 시간 CPU utilization: CPU가 노는 일이 없게 하는 것. 아래 그래프: CPU burst duration은 짧은것에 비하여 frquency는 높다. --> CPU는 시간이 짧게 걸리는 일을 자주한다. CPU Scheduler: ready queue에서 어떤 프로세스들에게 CPU시간을 할당하지 정한다. [cpu scheduling 결정을 해야하는 순간들] 1. Switches from running to waiting state 2. Switches from running to ready state 3. Switches from waiting to ready 4. Terminates 1, 4: CPU를 사..

[운영체제] Ch4(2)Implicit Threading

Implicit Threading : 애플리케이션 프로그래머가 쓰레드 생성을 하겠다는 api를 실질적으로 사용하는 것. --> 더 쉽게 멀티쓰레드를 만드는 것. 컴파일러나 라이브러리가 프로그래머 대신에 OS에서 thread를 만들어 준다. 1. Thread pool p34 쓰레드를 미리 많이 만들어 놓는다. 미리 만들어 놓으면 프로그램 수행 속도가 더 빠르다. 쓰레드 갯수를 미리 정할수도 있고 동적으로 변화시킬 수도 있다. 2. Fork-Join p37 쓰레드를 세로 만든 후(Fork), 만든 쓰레드에게 일을 시키고 종료되기를 기다린다.(Join) 3. OpenMP(C, C++, FORTURAM) p43 이것을 parallel로 해달라고 컴파일러에게 부탁하는 것 #paragma omp parallel 4..

[운영체제] Ch4(1)Multicore와 Multithread

개요 하나의 app이라도 여러 task를 수행하기 위해 최근 프로그램들은 모두 multithread를 이용한다. multi-process보다 시간도, 자원도, 비용도 더 적게 드는 multi-thread Multi-threaded 장점 응답성 향상 리소스 공유(리소스가 차지하는 메모리 공간 낮아짐) 비용적 측면, context switching 시간 빠름 multicore의 장점을 가져갈 수 있다. Multicore Programming Parallelism VS Concurrency Parallelism병렬처리: core라던지 cpu가 많은 환경 concurrency(Concurrent execution): 하나의 process나 하나의 core지만 소프트웨어적으로 동시에 수행하도록 짜는 것 paral..

[운영체제] Ch3(2)InterProcess Communication(IPC)

Interprocess Communication(IPC) 개념 process끼리의 통신 목적 정보공유 속도증가 모듈러리티(세분화)-->유지보수 용이, 유연성 증가 편의성 IPC 두가지 모델 IPC 모델 설명(2) (a) memory에 write, read (b) 서로 직접 send, receive Producer-Consumer Problem Producer-Consumer model :Producer는 데이터를 생성하고, Consumer는 데이터를 소비하는 모델 unnounded-buffer: 0~1024까지 다 쓰면 다시 0으로 돌아가서 다시 씀. IPC in Shared-Memory Systems https://m.blog.naver.com/demonic3540/221671407431 IPC (4)..

[운영체제] Ch3(1)Process개념과 작동

Process Concept Process: 프로그램을 수행하는 것(멈춰있는 것이 아니라 움직이는 것-active) [Process의 구성 요소] text section: 소스코드(명령어) program counter: cpu 안의 레지스터 값( 다음에 수행해야 할 번지수) stack: 일시적인 데이터 보관 장소 Data section: 데이터 저장 장소1 Heap: 데이터 저장 장소2 한 프로그램에 여러 프로세스가 존재 가능하다. (한 설명서에 여러 사람들이 보고 만드는 것) text, data: 사이즈 고정 stack, heap: 프로그램 수행 중 사이즈 늘었다 줄었다. data: global variable stack: local variable, argc, argv, 또 다른 함수 부를 때 hea..

[운영체제] Ch2(2) linkers and loaders & OS설계와 디버깅

Linkers and Loaders 큰 프로그램은 여러 사람들이 만든 소스코드들로 이루어져 있다. Linker는 이런 여러 소스코드들을 하나의 single binary executable file로 만들어 준다. loader는 linker로 인해 만들어진 executable file을 가져와 실행헤준다. (file를 클릭하여 수행할 때) 하지만 dynamically linked libraries는 필요할 때만 로드되어 사용된다. system call이 시스템마다 틀리기 때문에 한 운영체제에서 만든 system call은 다른 운영체제에서는 돌아가지 않는다. --> 이 때 가상의 VM을 만들어서 실행시킬 수 있다. Application Binary Interface: 오브젝 레벨의 인터페이스. 오퍼레이팅 ..