목록CS/운영체제 (8)
GiYeong
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rLMWN/btrI6qVD4h1/GxHV3kgeeE50GqqrSmCkiK/img.png)
캐시 메모리 속도가 빠른 장치와 느린 장치 간의 속도 차이로 인한 병목 현상을 줄이기 위한 범용 메모리로서, 주기억장치에서 자주 사용하는 프로그램이나 데이터를 저장하여 처리속도를 빠르게 해준다. 캐시 메모리와 주기억장치 사이에서 정보를 옮기는 것을 매핑(Mapping)이라고 하며 직접 매핑(Direct Mapping), 연관 매핑(Associate Mapping), 집합 연관 매핑(Set Associate Mapping)이 있다. 직접 매핑(Direct Mapping) : 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 매핑되는 방법으로, 간단하고 구현하는 비용이 적지만 캐시 적중률이 낮아질 수 있다. 연관 매핑(Associate Mapping) : 직접 매핑 방식의 단점을 보완한 방식으로, 모든 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bJ8Ivy/btrIYCC73kU/bUPedzirmNVXAKWxxqAFAk/img.png)
물리적 메모리 크기의 한계를 극복하기 위해 나온 기술로, 프로세스를 실행할 때 실행에 필요한 일부만 메모리(주기억장치)에 로드하고 나머지는 디스크(보조기억장치)에 두는 것이다. 즉, 보조기억장치의 일부를 주기억장치처럼 사용하는 것이다. 현재 가동되고 있는 프로세스의 내용 중, 덜 중요한 것들은 디스크 공간에 옮겨 놓고, 프로세스가 동작하면서 메모리에 필요한 데이터가 없으면 디스크에서 이를 가져오는 방식이다. 이를 통해 프로세스 전체가 물리적 메모리에 있는 것처럼 수행된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/KSRXA/btrIfSM736O/ic7V2hydNdt8FjbUAOJDaK/img.png)
Starvation 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태 Deadlock은 여러 프로세스가 동일 자원에 대한 점유를 요청할 때 발생하고, Starvation은 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생한다. 해결방법 프로세스의 우선 순위를 수시로 변경하여 각 프로세스마다 높은 우선 순위를 가질 수 있는 기회를 준다. 오래 대기한 프로세스의 우선 순위를 높인다. 우선 순위가 아닌 요청한 순서대로 처리하는 Queue를 사용한다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wNc5g/btrIkqawn6l/cDx9FIYkQng2nVobSSeMbK/img.png)
Deadlock 운영체제에서 데드락이란 시스템 자원에 대한 요구가 뒤엉킨 상태이다. 즉, 한 프로세스가 점유하고 있는 자원을 다른 프로세스에서 기다릴 때 무한 대기에 빠지는 상황을 말한다. Deadlock 발생조건 상호 배제 : 한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 해당 자원이 해체될 때까지 대기해야 한다. 점유 대기 : 자원을 최소 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다. 비선점 : 이미 할당된 자원은 강제로 뺏을 수 없다. 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다. Deadlock 해결법 데드락 발생 예방 데드락 발생 가능성을 인정하고 적절하게 회피 데드락 발생..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CBKrn/btrIjPhiWd1/wTicFWk12WdRCoUeNkuts0/img.png)
Thread Safe Thread Safe하다는 것은 멀티 스레드 프로그래밍에서 어떤 메서드나 변수, 객체가 여러 스레드로부터 동시에 접근이 이루어지더라도 실행에 문제가 없음을 의미한다. 즉, 어떤 메서드 또는 변수, 객체가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드에서 이를 호출하여 동시에 실행되더라도 각 스레드에서 실행 결과가 올바르게 나오는 것이다. 1. MUTEX를 이용한 동기화 방법 2. SEMAPHORES를 이용한 동기화 방법
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Nt4U0/btrH3beputM/BgkcvZjiHY00WTK7QmTld0/img.png)
동기(Syschronous) 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것으로, 요청을 하면 반드시 요청한 자리에서 결과가 주어져야 한다. 즉, 요청을 보낸 후, 응답을 받아야지만 다음 동작이 이루어지는 방식으로서, 설계가 간단하고 직관적이지만 모든 작업이 순차적으로 실행되며 어떤 작업이 수행중이라면 다음 작업은 대기해야 한다. 비동기(Asynchronous) 동시에 일어나지 않는다는 의미로서, 요청과 결과가 동시에 일어나지 않는다. 동기 방식보다 설계가 복잡하지만, 결과가 주어지는데 시간이 걸리더라도 해당 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 잇다. 블록(Block) 호출된 함수가 자신의 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 re..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b4F6qu/btrH1bM5f7r/N9XB0uOXy4UlUNwuEpXd8K/img.png)
멀티 프로세스 하나의 응용 프로그램을 여러 프로세스로 구성하여, 각 프로세스가 하나의 작업을 처리하도록 하는 것 장점 여러 자식 프로세스 중에서 하나의 자식 프로세스에 문제가 발생해도, 다른 자식 프로세스들에 영향을 끼치지 않는다. 단점 Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소도되는 등의 오버헤드가 발생한다. 프로세스들이 각각의 독립된 메모리 영역을 할당받아 공유하는 메모리가 없기 때문에, Context Switching이 발생하면 캐쉬에 있는 모든 데이터를 초기화하고 다시 캐쉬 정보를 불러와야한다. 프로세스간 통신이 어렵고 복잡하다. Context Switching 멀티 프로세스 환경에서 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bN5M7W/btrH1aURPkA/29rH60E1AFUbJrl5jj7ns0/img.png)
Process 운영체제로부터 자원을 할당받은 작업의 단위(메모리에 올라와 실행되고있는 프로그램의 인스턴스) 특징 프로세스를 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. 프로세스는 최소 1개의 스레드(메인 스레드)를 가지고 있다. 각 프로세스는 별도의 주소 공간에서 실행되며, 다른 프로세스의 변수나 자료구조에 접근할 수 없다. 다른 프로세스의 자원에 접근하려면 프로세스 간 통신을 사용해야 한다. Thread 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 특징 스레드는 프로세스 내에서 각각 Stack 영역만 할당 받고, Code, Data, Heap 영역은 공유한다. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 ..