[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/운영체제 33

[운영체제] 페이지 테이블

페이지 테이블의 구조 32비트 주소체계를 사용하는 경우 컴퓨터가 있다고 할 때, 주소 공간의 크기는 2의 32승이다. 페이지 하나의 크기가 4KB라면 이는 약 2^12이다. 페이지 테이블에 2^20개(2^32/2^12)의 정보가 저장되어야 하고, 항목 당 4바이트가 사용된다면 각 프로세스는 2의 22승, 즉 4MB의 페이지 테이블 공간을 물리메모리에 필요로 하게 된다. 애초에 페이징이라는 것이 연속된 메모리에 공간을 할당하는 것이 불합리해서 그 문제를 해결하기 위해 고안된 것인데, 페이지 테이블 때문에 4MB라는 공간을 연속해서 사용해야 한다는 모순이 발생한다. 따라서 페이지 테이블 구조를 개선해야 한다. 페이지 테이블 자체도 더 작은 단위로 쪼개서 메인메모리에 탑재한다. 이를 구현하기 위해 계층적 페이..

[운영체제] 페이징

페이징 단편화 문제를 압축방식으로 해결하려 했지만, 이 또한 비용이 발생한다. 좀 더 근본적인 해결책을 찾다가 발견한 것이 '페이징'이다. 단편화가 문제가 되는 이유는 프로그램을 연속된 메모리공간에 탑재해야만 하기 때문이다. 이러한 '연속적'이라는 조건을 없어지도록 하는 것이 페이징 기법이다. 즉, 페이징 기법은 연속된 물리공간을 필요로 하지 않으면서도, 실행시간 및 주소결속 등 프로그램 수행에는 문제가 없도록 하는 방식이다. 프레임, 페이지, 페이지테이블 3개로 이루어진다. 전체 물리적 공간을 같은 '프레임' 단위로 나누어놓고, 논리적 공간도 프레임과 같은 크기의 '페이지' 단위로 나눈다. 그리고 '페이지 테이블'을 통해 페이지를 프레임에 매핑시킨다. 즉 페이지 테이블은 일종의 주소 변환 테이블의 역할..

[운영체제] 분할

분할(Partition) 방법 여러 개의 프로그램을 적재하기 위해 메모리 공간을 여러개로 분할한다. 분할의 수가 다중 프로그래밍 가능의 정도가 된다. 이는 다시 고정분할 방법과 가변 분할 방법으로 나뉜다. 고정분할 방법 고정분할 방법은 분할의 단위가 되는 'Partition'의 크기가 고정된 것이다. 따라서 분할의 수도 고정된다. 이 경우 주소결속 방법이 간단하다.상한 레지스터와 하한 레지스터를 두고,상한 레지스터에는 영역의 크기가, 하한 레지스터에는 영역의 시작주소가 기록된다. CPU가 논리주소로 메모리를 접근하려 하면 먼저 그 논리주소값이 상한 레지스터에 기록된 영역의 크기값을 초과하는지 확인한다. 만약 초과한다면 이를 진행시킬 경우 다른 영역을 침범하게 될 것이므로 에러처리한다. 이러한 문제가 없다..

[운영체제] 메모리 경영

시분할 시스템에서는 여러 프로세스들이 동시에 수행된다. 즉, 여러 프로세스들이 메인메모리 상에 공존하고 있어야 한다. 제한된 용량의 메인메모리에서 이를 제대로 실현시켜 주어야 각 프로세스들의 성능도 저하되지 않고 CPU의 이용률도 올라가게 된다. 이런 맥락에서 이번 장부터는 메인메모리를 관리하는 다양한 기법들을 알아볼 것이다. 분할기법, 페이징기법, 세그먼테이션 기법 등이 그 예이다. 더 중요하다고 할 수 있는 가상 메모리 기법은 다음 파트에서 다룰 것이다. 다양한 기법들을 공부하기 전에 먼저 컴퓨터 시스템의 주소체계에 대한 이해가 필요하다. 따라서, 이와 관련된 개념들인 논리주소, 물리주소, 주소결속 등에 대하여 알아볼 것이다. 프로그램이 돌아가는 과정 int g_a; main() { … g_a++; ..

[운영체제] 교착상태 처리

교착상태 처리 방법 교착상태가 발생하지 않도록 하는 방법과 교착상태를 방치하고 이를 탐지하여 복구하는 방법이 있다. 이에 따라 예방, 회피 / 탐지, 복구로 나뉘어 진다. 교착상태 예방 교착상태 발생의 4가지 필요충분조건 중 한가지만 일어나지 않아도 예방이 된다. "상호 배제" 조건 부정 : 상호배제 조건을 부정하는 것은 사실상 불가능하다. 자원자체가 상호배제를 요구하는 것을 전제로 했기 때문이다. "점유 대기" 조건 부정 : 모든 자원을 실행 전에 미리 확보하도록 한다. 이렇게 되면 대기 자체가 필요없어져 교착상태를 예방할 수 있다. 하지만 자원을 바로 사용하지 않고도 장시간 점유를 해야하기 때문에 다른 프로세스에 악영향을 줄 수 있다. 또한 하나의 프로세스가 자원들을 독점하여 자원의 활용도가 낮아진다..

[운영체제] 교착상태

교착상태 한 프로그램에 공유자원은 여러개이다. 이에 따라 임계구역도 여러곳에 존재한다. 이런 경우 자원의 소유와 대기에 있어 물고 물리는 관계가 되면서 프로그램의 수행이 정지할 수 있다. 이를 '데드락' 혹은 '교착상태'라고 한다. 교착상태는 즉, 서로에게 필요한 자원을 서로 요구하는 경우이다. 각 프로그램이 지켜야할 프로토콜을 설정하여 해결할 수 있다. 예를 들면 반대쪽의 프로그램이 실행중임을 확인하면 한쪽편의 프로그램은 대기하고 있는 것이다. 그러나 이 역시 반대쪽에서 계속해서 프로그램이 등장하면 한쪽편은 기아상태가 발생할 수 있다. (이는 에이징 등의 기법으로 해결한다.) 교착상태의 예 : 세마포어 // T0 P(A); P(B); V(A); // T1 P(B); P(A); V(B); 세마포어에서 각..

[운영체제] 세마포어

Busy Wating 기존에 배웠던 방식의 공통점은 모두 while문을 사용했다. 즉, Busy Wating 알고리즘이다. 이는 무한루프를 돌면서 기다리고, 계속해서 타임슬라이스를 사용하기 때문에 낭비이다. 이에 대한 대안으로 제안된 것이 '세마포어'이다. 하지만 무한루프를 도는 것이 무조건 나쁜 것은 아니다. 커널 내에서 루프를 활용해 임계구역에 락을 거는 것을 'spin lock'이라고 한다. 상호 배제 관계에 있는 임계구역의 계산량이 현저히 적다는 것을 이미 개발자가 알고 있다면 spin lock을 활용하는 것이 세마포어보다 문맥교환의 오버헤드를 줄일 수 있어 효과적이다. 세마포어 세마포어는 임계구역을 진입하기 어려울 때, 자발적으로 '대기(BLOCK)'상..

[운영체제] 임계구역의 조건 및 구현

임계구역에 대한 요구사항 임계 구역을 만들 때 내부를 어떻게 설계해야 제대로 임계구역을 만든 것인가? Mutex (상호 배제, **MUTual EXclusion)** : 한 프로세스가 임계 구역을 실행 중일 때는 다른 어떤 프로세스도 임계구역을 실행할 수 없다. 진행 : 임계구역을 실행하는 프로세스가 없고 여러개의 프로세스들이 임계구역에 들어오려고 시도하면 이 중 하나의 프로세스만 선택하는 '결정 기법'이 있어야 하며, 이러한 결정은 무한정 미뤄져선 안된다. 제한된 대기 : 한 프로세스가 임계 구역에 대한 진입을 요청하고 요청이 수락될 때까지, 다른 프로세스가 임계구역을 실행하는 횟수에는 제한이 있어야 한다. 어떤 프로세스든 일정 시간 내에는 임계구역에 들어갈 수 있도록 다른 프로세스에 제..

[운영체제] 생산자, 소비자 쓰레드 / 원소적 실행

생산자/소비자 쓰레드 #include #include void consumer (void); char buffer[n]; int n, in = 0, out = 0; int main () { char nextp; int i; pthread_t tid; pthread_create (&tid, NULL, consumer,NULL); for (i = 0; i < 500; i++) { produce an item in nextp while ((in+1) % n == out) ; // 대기 loop buffer[in] = nextp; in++; in %= n; } pthread_join (tid); } void consumer(void) { char nextc; for (i = 0; i < 500; i++) { w..

[운영체제] 상호작용 프로세스와 동기화

상호작용 프로세스 (Cooperating process) 상호작용 프로세스 : 컴퓨터에는 여러 프로세스들이 집합을 이루고 있다. 그런 프로세스들이 서로 상호작용을 한다는 의미이다. 쓰레드끼리의 상호작용도 해당개념에 포함된다. 상호작용이 원활히 되면 좋겠지만 결정성, 상호배제와 동기화, 교착상태, 기아 등의 이슈가 존재한다. 해당 파트에서는 결정성, 상호배제와 동기화에 대해 중점적으로 학습한다. 프로세스 시스템 프로세스 시스템 : 상호작용 프로세스의 모델링이다. 프로세스의 집합과 이들의 선행 제약으로 정의된다. 선행제약 : 프로세스의 집합 내에서 프로세스 간의 제약 관계를 뜻한다. 예들 들어 순서에 대한 제약관계가 있다. 해당 순서관계는 부분 순서의 성질을 갖는다. 즉, 집합에 존재하는 모든 프로세스 간에..