본문 바로가기

CS/운영체제

(20)
동기 vs 비동기, 블로킹 vs 논블로킹 동기와 비동기를 판단하는 기준은 작업 완료이다. 동기는 호출한 함수가 작업 완료를 스스로 신경 쓴다. 비동기는 호출된 함수(callback 함수)가 신경 쓰고, 호출한 함수는 신경 쓰지 않는다. 동기 (Synchronous) 요청과 결과가 동시에 일어난다. 어떤 작업에 대한 요청이 발생했을 때, 그 요청에 대한 응답을 받을 때까지 대기해야 한다. 작업에 대한 완료를 호출한 함수가 신경 쓴다. Thread1, Thread2가 존재할 때, Thread1에서 처리하려고 했던 일을 Thread2에게 보낸 경우, Thread2가 해당 작업을 수행하는 동안 Thread1은 대기 상태가 된다. 비동기 (Asynchronous) 요청과 결과가 동시에 일어나지 않는다. 작업에 대한 완료를 호출 함수가 아닌 callbac..
교착 상태 (Deadlock) 교착 상태(Deadlock)이란 프로세스나 스레드가 결코 일어날 수 없는 특정 이벤트를 기다리는 상태이다. 둘 이상의 프로세스나 스레드가 서로 점유하고 있는 자원을 기다릴 때, 무한 대기 상태에 빠지는 것을 말한다. 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. 프로세스A와 프로세스B가 디스크와 프린터 자원을 얻어야 한다고 가정하자. 현재 프로세스A는 프린터를, 프로세스B는 디스크를 점유하고 있다. 그렇다면, 서로 원하는 자원이 상대방에서 할당되어 서로 놓지 않고 무한정 대기 상태에 빠지게 되는 것이다. 교착 상태 발생의 4가지 조건 교착 상태가 발생하는 4가지 조건은 다음과 같다. 4가지를 모두 성립해야 교착 상태가 발생한다. 상호 배제 자원은 한 번에 하나의 프로세스만 사용할 수..
커널 커널(Kernel)의 사전적 의미는 핵심이다. 하드웨어와 프로세스를 연결하는 핵심 인터페이스이며, 소프트웨어와 하드웨어를 연결해 준다. 커널의 기능으로는 프로세스 관리, 메모리 관리, 파일 시스템 관리가 있으며, 프로세스 관리는 프로세스의 생성 및 제거를 담당하며, 스케줄러를 이용하여 여러 프로세스 동작을 제어한다. 메모리 관리는 각 프로세스가 독립적으로 사용할 수 있는 가상 주소 공간을 제공한다. 여기서 가상 주소 공간이란, 프로세스가 실행되는 물리 메모리의 실제 주소를 가리키는 주소들의 집합으로 가상 주소를 물리 주소로 매핑하며 실행된다. 파일 시스템 관리는 시스템에 동작하는 모든 자원을 파일처럼 다룰 수 있도록 인터페이스를 제공한다. 커널 모드와 유저 모드 커널 모드와 유저 모드가 분리되는 이유는 ..
메모리 구조 운영체제의 메모리 구조는 유저 영역, 커널 영역 두 가지로 분리된다. 편리한 관리를 위해, 일반 프로그램의 실행을 위한 메모리 공간과 운영체제의 실행을 위한 메모리 공간으로 분리시켰다. 유저 영역은 다시 스택, 힙, 데이터, 코드 영역으로 나뉘며, 유저 영역을 제외한 영역을 커널 영역이라고 한다. 커널 영역 커널 영역에는 커널(kernel)이 위치하고 있으며, 이 커널은 컴퓨터 운영체제의 핵심이라고 할 수 있다. 커널은 시스템의 모든 것을 완전히 통제하기 때문에 사용자(유저 모드)가 직접 접근할 수 없으며, 접근 시 system call을 통한 커널 모드로의 전환이 필요하다. 유저 영역 유저 영역은 스택, 힙, 데이터, 코드 영역으로 나뉜다. 엄밀히 말하자면 하나의 프로세스를 묶어 놓은 세그먼트(segm..
캐시의 지역성 캐시 메모리는 속도가 빠른 장치와 느린 장치 간의 속도 차에 따른 병목 현상을 줄이기 위한 범용 메로리라고 알아보았다. 이러한 역할을 수행하기 위해서는 CPU가 어떤 데이터를 원할 것인가를 어느 정도 예측할 수 있어야 한다. 캐시의 성능은 작은 용량의 캐시 메모리에 CPU가 이후에 참조할 데이터가 어는 정도 들어있느냐에 따라 좌우되기 때문이다. 이때 적중률(Hit rate)을 극대화시키기 위해서 데이터 지역성(Locality)의 원리를 사용한다. 지역성의 전제 조건으로 프로그램은 모든 코드나 데이터를 균등하게 접근하지 않는다는 특성을 기본으로 한다. 즉, 지역성이란 기억 장치 내에 정보를 균일하게 접근하는 것이 아닌 어느 한순간에 특정 부분을 집중적으로 참조하는 특성인 것이다. 이 데이터 지역성은 대표적..
캐시 메모리 캐시 메모리 캐시 메모리는 속도가 빠른 장치와 느린 장치 간의 속도 차이에 의해 발생하는 병목 현상을 줄이기 위한 범용 메모리이다. CPU가 메인 메모리에 접근하기 전에 캐시 메모리에서 원하는 데이터의 존재 여부를 확인하는데, 이때 필요한 데이터가 있는 경우 Hit(적중), 없는 경우 Miss(실패)라고 한다. 요청한 데이터를 캐시 메모리에서 찾을 확률을 Hit Ratio(적중률)이라고 하며, 캐시 메모리의 성능은 이 적중률에 의해 결정된다. 캐시의 종류 캐시 메모리의 작동 순서는 L1에서 순차적으로 데이터를 찾아 L2, L3로 올라가며 데이터를 찾는다. L1 Cache CPU와 가장 가까운 캐시이며, 속도를 위해 IC와 DC로 나뉜다. IC(Instruction Cache) : 메모리에서 text 영역..
가상 메모리 다중 프로그래밍을 실현하기 위해서는 많은 프로세스들을 동시에 메모리에 올려두어야 한다. 예전에는 실행되는 코드의 전부가 물리 메모리에 존재해야 했고, 메모리 용량보다 큰 프로그램을 실행시킬 수 없었다. 또한, 여러 프로그램을 동시에 메모리에 올리기에는 용량의 한계와 페이지 교체들의 성능 이슈가 발생하며, 가끔만 사용되는 코드가 메모리를 차지하고 있다는 점에서 불필요하게 전체의 프로그램이 메모리에 올라와 있다는 문제가 있다. 가상 메모리는 프로세스 전체가 메모리 내에 올라가지 않더라도 실행이 가능하도록 하는 기법이다. 프로그램의 일부분만 메모리에 올릴 수 있다면, 물리 메모리 크기에 제약받지 않게 되며, 더 많은 프로그램을 동시에 실행할 수 있게 되어 응답 시간은 유지되고 CPU 이용률과 처리율은 높아진다..
메모리 할당과 단편화 메모리는 명령어와 처리된 데이터들의 모임으로, 메모리에 상주하는 운영체제를 위한 것과 사용자 프로세스를 위한 것으로 나뉜다. 사용자 프로세스 영역에서 프로세스들은 어떻게 메모리에 할당되는지에 대해 알아본다. 메모리 할당 방식에는 연속 할당과 불연속 할당 방식으로 나뉜다. 불연속 할당 방식에는 Paging 기법과 Segmentation 기법이 있으며, 이번에는 연속 할당 방식에 대해 알아본다. 연속 할당 방식이란, 프로세스를 메모리에 올릴 때 주소 공간을 여러 개로 분할하지 않고 물리적 메모리의 한 곳에 연속적으로 적재하는 방식이다. 연속 할당 방식에는 고정 분할 방식과 가변 분할 방식이 있다. 고정 분할 방식 고정 분할 방식은 메모리를 똑같은 고정된 크기로 분할하여 각 분할된 부분마다 한 프로세스를 적재..