전체 글(42)
-
[CS : OS] 페이지 교체 알고리즘
1. 가상 메모리 물리 메모리가 가지는 크기의 한계를 극복하기 위해 나온 기술이 가상 메모리이다. 각 프로세스에서 현재 실행에 필요한 부분만 메모리에 적재하여 효율을 극대화하는데 이때 현재 필요한 부분(보통은 페이지)만 올리는 것을 Demading Paging(요구 페이징)이라고 함. 두 프로세스 P1, P2는 현재 필요한 페이지만 메모리에 할당한 상태인데, 지금은 P1이 수행 중이다. 기존의 페이지 테이블과 다른 점은 Valid bit를 두어서 현재 메모리에 적재된 부분은 1 , 아닌 부분은 0으로 표시한다. 그러나 CPU가 지금 P1의 3번째 페이지에 접근하려고 하는데 Valid bit 가 0이면 인터럽트가 발생하는데 이런 현상을 ‘페이지 부재’ Page Fault 라고 부른다. 다음과 같은 방식으로..
2021.05.24 -
[CS : OS] 페이징과 세그먼테이션
1. 페이징(Paging) : 외부 단편화에 대한 해결책 (고정 분할 방식) 먼저 페이징은 외부 단편화로 인한 메모리 낭비가 매우 심하고 그때 Compaction(압축)을 사용하면 외부 단편화를 해결할 수는 있지만, 그로 인해 생기는 오버헤드와 비효율적인 성능으로 사용하기 어렵기 때문에 나온 기법이다. 단편화란? 단편화에는 내부 단편화, 외부 단편화가 있는데 둘 다 메모리 공간이 낭비되는 상황을 의미한다. 다음과 같이 메모리에 50MB의 공간이 남아있고 30MB의 신규 프로세스가 실행된다면, 다음과 같이 적재가 되고 이곳에는 20MB라는 내부 단편화가 생긴다. 이곳에 20MB 이상의 프로세스는 적재되지 못하고 낭비되는 현상이 생긴다. 외부 단편화란 그림처럼 공간이 100MB나 있음에도 C작업이 적재되지 ..
2021.05.23 -
[CS : OS] 셰마포어와 뮤텍스(Semaphore & Mutex)
Mutex, Semaphore가 생긴 이유 Critical Section(임계 영역) 코드상에서 경쟁조건이 발생할 수 있는 특정 부분(각 프로세스에서 공유 데이터를 접근하는 프로그램 코드 부분) 다수의 프로세스(스레드)가 공용 자원에 동시에 접근할 때, 접근 순서에 따라 결괏값이 달라질 수 있음!(Race Condition) -> 따라서 Critical Section에 대한 Race Condition을 없애기 위해 Mutex와 Semaphore라는 동기화 메커니즘을 통해 문제 해결!! Mutex(Mutual Exclution) 오직 하나의 스레드만이 동일한 시점에 뮤텍스(자원에 대한 접근을 동기화하기 위해 사용되는 상호 배제 기술)를 얻어 임계 영역에 들어올 수 있는 Locking 메커니즘. lock :..
2021.05.23 -
[CS : OS] 경쟁상태 (Race Condition)
Race Condition(경쟁 상태) 다수의 프로세스(스레드)가 공용 자원에 동시에 접근할 때, 접근 순서에 따라 결괏값이 달라질 수 있는 상태 예를 들어 커플이 동시에 다른 ATM에서 커플통장의 돈을 뽑는 경우, 남자가 돈을 뽑는 과정을 수행하는 도중 interrupt가 걸려 여자가 돈을 뽑는 과정이 수행되면 여자의 돈 뽑는 과정이 반영되지 않은 채 남자가 돈 뽑는 과정이 수행된다. -> 공유 자원을 접근 할 때 순서를 조절하여 비정상적인 상태를 예방해야 한다!(동기화) (위의 예제와 같은 경우 디버깅 시에는 문제점이 전혀 보이지 않기 때문에 에러를 찾기가 매우 어려움! 따라서 동기화 문제를 고려하여 설계를 하는 것이 매우 중요!) Race Condition이 발생하는 경우 커널 작업을 수행하는 중에..
2021.05.23 -
[CS : OS] IPC & CPU 스케줄링 & DeadLock
1. IPC 1) IPC : Inter Process Communication의 약자이다. 기본적으로 프로세스는 자신에게 할당된 메모리 내의 정보만 접근할 수 있다. 이를 벗어나는 경우 Segmentation Fault 등의 오류가 발생한다. 따라서 한 프로그램에서 병렬성을 키우면서 공유되는 데이터를 사용하기 위해 메모리 공간을 공유하는 스레드를 이용하는 경우가 많다. 하지만 이것은 하나의 프로그램에서만 의미가 있는 것이고, 서로 다른 프로그램의 데이터를 공유하려면 결국 다른 프로세스의 메모리를 접근할 필요가 발생한다. 수많은 프로세스가 OS 상에 상주하면서 user의 요구 사항을 수행한다. 그런데 여러 가지가 동시에 수행되고 있기 때문에 System Resource를 같이 사용함으로써 그 효율성을 증대..
2021.05.21 -
[CS : OS] 인터럽트 & System call & PCB / Context Switching
1. 인터럽트 (Interrupt) 근본적으로 하나의 CPU에 여러 프로세스가 경쟁적으로 수행할 시간을 부여받는 환경인데, 이때 인터럽트란 프로그램을 실행하는 중에 예기치 않은 상황이 발생할 경우 혹은 지금 수행 중인 작업보다 더 중요한 일이 생기면 CPU에 신호를 보내서 현재 진행 중인 프로그램을 즉시 중단하고 발생한 상황을 우선적으로 처리하고 다시 복귀하는 과정이다. 이러한 인터럽트를 유발하는 상황은 다음과 같이 3가지가 있다. 1) 외부 인터럽트 갑작스러운 전원 이상, 기계 착오, 입출력 요청(보통 입출력 장치 속도가 느려서 얘 먼저 해줌) 2) 내부 인터럽트 보통 Trap 이라고 불리며 잘못된 명령이나 데이터를 사용할 때 발생한다. 예를 들어 0으로 나누기가 발생, 오버플로우, 명령어 잘못 사용 ..
2021.05.21