목록기타 CS 이론/Kernel (5)
만족
Real-Time Scheduling 정해진 시간 안에 주어진 기능이 제대로 동작하게 하는 스케쥴링 방식. Real-Time이 Super-Fast를 의미하는 것은 아니다. Real-Time Scheduling: Types Hard Real-Time 실행 시간이 정해진 Deadline을 넘어서면 치명적인 문제가 발생한다. 예를 들어 자동차 자율 주행 시스템이나, 원자로 감시 시스템 처럼 감지와 대응이 늦어질 경우 큰 사고로 이어질 수 있는 분야에 적용되는 기법이다. Soft Real-Time 실행 시간이 정해진 Deadline을 넘어서면 시스템의 품질이 하락하는 경우. (치명적인 사고를 발생시키지는 않음) 예를 들어, 축구 실시간 중계 방송에서 실행 시간이 Deadline을 넘어서면 buffering이나 ..
인터럽트가 발생할 경우 다른 프로세스들을 정지시킨 채로 인터럽트 핸들러가 우선적으로 실행되며 이 인터럽트 핸들러는 non-preemptive(다른 프로세스가 선점할 수 없음)하며, 다른 프로세스, 심지어 다른 인터럽트 핸들러들 까지도 현재 인터럽트 핸들러가 끝나기 전까지는 실행되지 않는다. 인터럽트 핸들러에서 실행하는 작업 중, 중요성이 비교적 낮고 시간이 오래 걸리는 작업에 대해 시스템 반응성을 최대한 보전하면서 진행하려면 어떻게 해야 할까? 중요도가 높은 것은 Top Half(즉시 한번에 처리), 그렇지 않은 것은 Bottom Half(여유가 될 때 까지 연기)로 이관하여 Interrupt Handler의 동작을 쪼갤 수 있다. Kinds of Bottom Halves Bottom Half와 관련된 ..
요즘 대부분의 컴퓨터가 멀티코어 환경인 만큼 프로그램 개발 시 발생하는 동기화 문제에 대해 얼마나 성능 감소를 완화시킬 수 있을지가 매우 중요하다. 실제로 우리가 동일한 성능을 가진 코어가 있을 때, 1코어 CPU와 2코어 CPU를 비교하면 2코어 CPU의 성능이 2배 빠를 것으로 기대하지만, 실제로 차이는 그보다 훨씬 적다. 코어 갯수가 늘어날 수록 동기화 문제가 점점 복잡해지고 그에 따라 Overhead가 커지기 때문인데, 오늘은 이런 동기화 성능 감소치를 비약적으로 낮춘 RCU에 대해 알아볼 것이다. 문제 어떤 문자열 포인터가 있다고 해 보자. 이 문자열 포인터에 N개의 스레드가 접근해 Read하려고 하고 M개의 스레드가 접근해 Write하려고 하는 상황이다. N개의 스레드가 Read하는 도중 1개..
Interrupt란? 비동기적으로 하드웨어 신호를 발생시켜 장치가 프로세서의 주목을 요청하는 것 I/O 장치와 프로세서 간의 속도 차이로 인해 프로세서가 I/O 작업을 요청하고, I/O 디바이스가 작업이 완료되었을 때 그것을 프로세서에게 알리는 것 역시 인터럽트이다. 이러한 인터럽트는 모든 종류에 대해 핸들링되는 것은 아니다. 실제로 인터럽트가 발생하더라도, 인터럽트 핸들러가 없는 인터럽트는 아무런 일도 일어나지 않는다. IRQ (Interrupt ReQuest) 그렇다면 OS는 인터럽트의 종류를 어떻게 구별할 수 있을까? (HDD가 발생시킨 인터럽트와 cpu timer가 발생시킨 인터럽트를 어떻게 구분하는가?) ubuntu에서는 /proc/interrupts에 인터럽트 정보를 기술한 파일이 존재하는데,..
리눅스 커널에서는 자체적으로 LinkedList를 제공한다. 여기에서 제공되는 LinkedList는 "원형 더블 링크드 리스트이다" 이...이게뭐노..? 이미지에서 볼 수 있듯이 각 노드는 head와 prev 포인터를 갖는다. //#include struct list_head{ struct list_head *prev, *next; } 엥? 각 노드에 데이터는 어디있나? 특이하게도 prev, next, data가 평면적으로 존재하는것이 아니라, data안에 prev,next 정보를 가진 구조체 변수가 존재한다. struct your_data{ struct list_head list; int data; } 그러니까 위의 Circular Doubly Linked List에서 각 노드마다 data가 같이 존재..