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

💻 CS 193

[운영체제] 세마포어

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..

[자료구조] Linked List

본 게시글은 대학생이 수업을 듣고 내용을 정리한 것입니다. 따라서 완벽하지 않은 부분이 있을 수 있습니다. 아울러 본 게시글에 포함된 코드들은 대략적인 개념 이해만을 위해 작성된 것으로 완전하지 않은 코드임을 알려드립니다. 링크드 리스트의 개념 링크드 리스트는 데이터를 순서대로 저장해준다. 계속해서 새로운 요소를 추가할 수 있다. 배열과는 다르게 각 요소는 사실상 독립적인 레퍼런스에 위치해있다. 각 요소를 노드라고 하고, data 속성과 next 속성을 보유한다. next에는 다음 노드에 대한 레퍼런스가 들어있다. 따라서 실제 메모리에 각 노드들이 여기저기에 흩어져있어도 next속성을 통해 이어진 것처럼 활용할 수 있다. 링크드 리스트의 구현 class Node { int a; Node *n; } 노드는..

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

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

[자료구조] Stack & Queue

본 게시글은 대학생이 수업을 듣고 내용을 정리한 것입니다. 따라서 완벽하지 않은 부분이 있을 수 있습니다. 아울러 본 게시글에 포함된 코드들은 대략적인 개념 이해만을 위해 작성된 것으로 완전하지 않은 코드임을 알려드립니다. Stack Insert/Delete만 제공 Push/Pop이라고 부름 Last in, First Out 성능 : Push O(1), Pop O(1) Stack Pointer(SP) : 스택의 최상위 부분. 주로 다음 저장될 위치, 즉 빈 공간을 지칭한다. Stack의 구현 int Stack[N]; int SP; int init() { SP = 0; } int isEmpty() { return SP == 0; } int Push(int x) { Stack[SP] = x; SP++; } ..

[운영체제] 실시간 스케줄링

실시간 시스템 Inverted Pendulm, 막대의 기울기나 속도 정보등을 시스템으로 전달한다. 시스템이 그를 분석하여 엑추에이터를 통해 막대의 위치를 조정하여 막대가 쓰러지지 않도록 한다. 연성 실시간 시스템 : 데드라인을 만족한다는 것이 90%같은 확률로 표현된다. 중요한 실시간 프로세스가 그렇지 않은 프로세스에 비해 우선권만 가지고 있다. 경성 실시간 시스템 : 데드라인을 100% 만족한다는 엄격한 요구조건을 만족시켜야 한다. 데드라인이 지난 후에 서비스를 받는 것은 서비스를 전혀 받지 않는 것과 동일하다. 지연 시간의 최소화 이벤트 : 타이머가 만료되었을 때와 같은 소프트웨어적인 이벤트 / 원격으로 제어되던 장치가 방해물을 만났을 때와 같은 하드웨어적인 이벤트 사건지연 시간 (event late..

[운영체제] 다중처리기 스케줄링

지금까지 알아본 스케줄링은 CPU 내 처리기가 하나만 존재함을 전제로 하고 이야기했다. 하지만 요즘 컴퓨터에는 CPU가 하나여도 그 속에 코어가 여러 개 들어있다. 즉, 듀얼코어, 쿼드코어 등의 다중처리기 시스템이 보편화되어 있다. 다만 이러한 다중처리기에서 어떤 처리기는 계속 작업을 하고 어떤 처리기는 계속 쉬고 있어선 안된다. 다중처리기 시스템을 제대로 활용하려면, 서로간에 작업을 적절히 나누어 처리하도록 해야 한다. 즉, 부하공유(Load Sharing)를 제대로 수행하도록 해야 한다. 다만 이렇게 할 경우 스케줄링 문제는 더욱 복잡해질 수 있다. 어떤 프로세스는 특정 프로세서의 버스에만 부착된 입출력 장치를 사용해야 할 수도 있는데, 이러한 제한 사항을 하나하나 고려해며 스케줄링을 해야하기 때문이..

[운영체제] 비선점 스케줄링과 선점 스케줄링

비선점 vs 선점 스케줄링 비선점 스케줄링 : 프로세스가 입출력 요구 등으로 CPU를 자진 반납할 때까지 CPU에 의한 실행을 보장해주는 스케줄링이다. 작업 실행 시간 전체 또는 한번의 CPU 배당에 적용된다. FCFS(First-Come-Fist-Served) / 최단 작업 우선(SJF, Shortest Job First) / 우선순위 스케줄링 (Priority Scheduling)이 이러한 비선점 스케줄링의 알고리즘이다. 선점 스케줄링 : 시분할 시스템에서 타임슬라이스가 소진되었거나 인터럽트 혹은 시스템 호출 종료로 인한 여파로 현 프로세스보다 높은 우선순위의 프로세스가 나타나는 스케줄링이다. 현 프로세스로부터 강제로 CPU를 회수한다. 라운드 로빈 스케줄링 / 다단계 큐 스케줄링 / 다단계 피드백 ..

[운영체제] 스케줄링

스케줄러의 종류 사실 스케줄링 작업을 수행하는 스케줄러는 다양하다. 장기 스케줄러(작업 스케줄러) : 오프라인과 연계되는 일괄처리 큐를 별도로 유지하는 경우에 사용한다. 어떤 작업이 시스템에 먼저 들어와 먼저 처리 될 것인지를 결정한다. 또는 어떤 프로그램을 하드디스크로부터 메모리로 적재할 것인가를 결정한다. 단기 스케줄러(CPU 스케줄러) : 메모리 내의 준비 상태에 있는 프로세스 중에서 어떤 프로세스를 먼저 실행시킬지 결정해서 CPU를 할당하는 스케줄러이다. 중기 스케줄러 : 가상 메모리 체제에서 너무 많은 프로세스가 적재되면 하드디스크 입출력이 과대해져 시스템이 거의 멈추는 쓰레싱(Thrasing) 현상이 발생할 수 있다. 이 때 스와핑이라는 기술이 사용된다. 일부 프로세스 메모리를 디스크로 내보내..

반응형