Last active
October 15, 2018 15:34
-
-
Save Curookie/efc37b9a7e58135de365034584c1c8f1 to your computer and use it in GitHub Desktop.
운영체제(OS)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
★ 프로그램(Program) | |
- 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합 | |
★ 프로세스(Process) | |
- 간단하게 말하면 '실행 중인 프로그램' 입니다. | |
- 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 됨 | |
- 프로세스는 데이터와 메모리등의 자원과 쓰레드로 구성 | |
★ 쓰레드(Thread) | |
- 쓰레드란 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것을 말함. | |
- 프로세스에서 가장 작은 실행 단위. | |
★ 교착상태(Deadlock)란? | |
프로세스들이 서로 작업을 진행하지 못하고 영원히 대기 상태로 빠지는 현상을 교착상태라고 한다. | |
이러한 교착상태가 발생하는 원인은 프로세스 사이에 할당된 자원의 충돌로 인하여 발생하게 된다. | |
예를 들어 A와 B라는 2개의 프로세스가 동작을 한다고 하자. | |
그리고 이들은 각각 a와 b라는 자원을 할당 받아 사용하고 있다고 가정하자. | |
이때 프로세스 A 에서는 작업을 계속 진행하기 위해서 b라는 자원을 요청하고 프로세스B에서는 | |
a라는 자원을 요청하게 되면 각각의 프로세스가 요청한 자원이 이미 다른 프로세스에 할당되어 있기 때문에 | |
할당이 풀릴 때까지 대기 상태에 들어가게 된다. 그런데 A와 B 프로세스 모두 상대방이 자원을 내놓기를 기다리면서 대기 상태로 들어가기 때문에 | |
이들은 영원히 대기 상태에 머무는 교착상태에 빠지게 되는 것이다. | |
★ 임계 구역(Critical Section) | |
임계 구역으로 프로세스 또는 스레드들이 공통 변수들에 접근, 및 수정하고 테이블을 갱신하며, | |
파일의 읽기, 쓰기 작업들을 수행하는 영역을 말한다. 즉 race condition이 발생하는 영역을 뜻한다. | |
이미 한 스레드가 Critical Section에 들어갔을 때 다른 스레드들은 이 곳으로의 접근을 막아야한다. | |
뮤텍스와 세마포어는 데드락을 피하기 위한 기술이다. | |
★ 뮤텍스(mutex) | |
뮤텍스란 MUTual EXclusion 으로 우리말로 해석하면 '상호 배제' | |
Critical Section을 가진 Thread들의 running time이 서로 겹치지 않게, 각각 단독으로 실행되게 하는 기술이다. | |
★ 세마포어(Semaphore) | |
세마포어는 프로세스의 순차적인 처리를 위해 만든 기법으로 프로세스들끼리 경쟁을 막아 원할한 자원 공유를 가능하게 합니다. | |
wait(약어P)와 signal(약어V)의 함수를 적절히 호출함으로 여러 프로세스를 수행하는 방법이다. | |
Thread 가 Critical Section에 접근할때 (또는 processer로 부터 resource를 할당받을때) 해당 Thread는 세마포어의 카운트를 감소시키고 | |
수행이 종료된 후엔 세마포어의 카운트를 원래대로 증가시킨다. 다시말하면 세마포어는 일종의 신호등의 역할을 하는것이다. | |
★ 페이지 교체 알고리즘(FIFO, LFU, LRU) | |
FIFO(Firstt In First Out) | |
:각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법이다. | |
-이해하기 쉽고, 프로그래밍 및 설계가 간단하다. | |
-벨레이디의 모순Belady's Anomaly) 현상이 발생한다. | |
※벨레이디의 모순Belady's Anomaly) 현상 | |
:페이지 프레임 수가 많으면 페이지 부재의 수가 줄어드는 것이 일반적이지만 페이지 프레임 수를 증가시켰는데도 | |
불구하고 페이지 부재가 더 많이 일어나는 현상. | |
LRU(Least Recently Used) | |
:최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다. | |
-각 페이지마다 계수기(Counter)나 스택(Stack)을 두어 현 시점에서 가장 오랫동안 사용하지 않은, 즉 가장 오래전에 사용된 페이지를 교체한다. | |
-계수기나 스택과 같은 별도의 하드웨어가 필요하며, 시간적인 오버헤드가 발생된다. | |
-실제로 구현하기가 매우 어렵다. | |
※LRU에서 교체 페이지 선정 방법 | |
:최근에 가장 오랫동안 사용하지 않은 페이지를 쉽게 선정하려면, 현 시점까지 참조된 페이지 번호 순서를 거꾸로 검사하여 중복되지 않고 | |
가장 나중에 나타나는 페이지를 선택한다. | |
※LRU 근사 알고리즘 | |
-LRU 알고리즘은 실제 구현하기 어렵기 때문에 시스템에서는 LRU와 비슷한 알고리즘을 사용하게 되는데, 이를 LRU 근사 알고리즘 이라고 한다. | |
-LRU 근사 알고리즘은 참조 비트를 사용하는 것으로 NUR등이 있다. | |
LFU(Least Frequently Used) | |
:사용 빈도가 가장 적은 페이지를 교체하는 기법이다. | |
-활발하게 사용되는 페이지는 사용횟수가 많아 교체되지 않고 사용된다. | |
-프로그램 실행 초기에 많이 사용된 페이지가 그 후로 사용되지 않을 경우에도 프레임을 계속 차지할 수 있다. | |
★ 메모리의 단편화(Memory Fragmentation) 해결방법 | |
내부 단편화(Internal Fragmentation) | |
필요한 양보다 더 큰 메모리가 할당이 되어서 할당 된 메모리 내부에 | |
사용하는 메모리 공간 이외에 사용하지 않는 메모리 공간이 발생했을 때를 말한다. | |
외부 단편화(External Fragmentation) | |
메모리가 할당이 되고 해제가 되는 작업이 반복될 때 작은 단위의 메모리가 | |
띄엄띄엄 존재하게 되는데 빈 메모리의 전체 공간은 충분한 양이지만 실제로 사용할 수 없는 경우를 말한다. | |
압축(Compaction) | |
메모리 공간들을 재배치 하여, 단편화로 인해 분산되어 있는 메모리공간들을 하나로 합치는 기법이다. | |
통합(Coalescing) | |
단편화로 인해 분산된 메모리공간들을 인접해 있는 것끼리 통합시켜 큰 메모리 공간으로 합치는 기법이다. | |
압축은 재배치가 일어나지만 통합은 인접한 공간들끼리 통합된다는 차이가 있다. | |
페이징(Paging) - 가상 메모리 사용, 외부 단편화 해결 | |
보조기억장치를 이용한 가상 메모리(Virtual Memory)를 같은 크기의 블록으로 나눈 것을 페이지(Page)라고 한다. | |
주 기억장치를 페이지와 같은 크기로 나눈 것을 프레임(Frame)이라고 한다. | |
페이징 기법이란 사용하지 않는 프레임을 페이지에 옮기고(swap-out), | |
필요한 메모리를 페이지 단위로 프레임에 옮기는(swap-in) 기법이다(중기 스케줄링). | |
외부 단편화는 해결이 되지만 내부 단편화는 해결되지 않는다. | |
세그멘테이션(Segmentation) - 가상 메모리 사용, 내부 단편화 해결 | |
가상메모리를 사용한다는 것으로는 페이징 기법과 유사하지만 같은 크기로 나누지 않고 서로 다른 크기로 나누고 단위는 | |
세그먼트(Segment)라고 하며, 이를 이용한 메모리 관리 기법을 세그멘테이션 기법이라고 한다. | |
내부 단편화는 해결이 되지만 외부 단편화는 해결되지 않는다. | |
멀티 코어를 활용할 수 있는 프로그래밍 기법 | |
- 멀티 스레드 | |
- 멀티 프로세스 | |
- OpenMP | |
- C++ ox PPL | |
- IntelTBB | |
OpenMP |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment