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

💻 CS/운영체제 33

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

실시간 시스템 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) 현상이 발생할 수 있다. 이 때 스와핑이라는 기술이 사용된다. 일부 프로세스 메모리를 디스크로 내보내..

[운영체제] 쓰레드

쓰레드의 개요 fork()를 사용하면 사용자 공간 상 text 영역은 부모프로세스와 공유하고, data,bss,heap,stack 영역은 복사되어 별도로 할당된다. 이렇게 생성된 프로세스가 전통적 프로세스이며, heavy weight process이다. 이러한 heavy weight process는 data영역이 별도로 할당되기 때문에 프로세스간의 공유변수를 갖기 어렵다. (운영체제가 제공하는 특수 구조체나 공유파일(pipe, shared mem., signal, socket 등)을 사용해야 공유가 가능해진다.) 또한 영역을 복사하는 과정이 시간적 오버헤드와 메모리 낭비를 초래할 수 있다. 반면 light weight process인 쓰레드는 text와 data 모두를 공유하고 stack만 따로 갖는 형..

[운영체제] 프로세스의 생성과 종료

프로세스의 생성 생성상태란 PCB와 주소공간이 마련된 상태를 의미한다. 프로세스는 보통 fork 시스템 콜을 통해 생성된다. 이 때 생성한 주체인 프로세스를 부모프로세스, 피 생성된 프로세스를 자식프로세스라고 한다. 부모와 자식은 1:N 관계가 될 수 있다. 그에 따라 전체적으로 프로세스 구조는 tree형태를 나타낼 것이다. fork()의 수행은 부모 프로세스에서 일어나지만, fork()로부터의 리턴은 부모, 자식 모두에게 일어난다. 단, 부모 프로세스의 리턴값은 자식 프로세스의 고유번호(PID)이고 자식 프로세스의 리턴값은 0이다. 이렇게 리턴값을 다르게 설정한 이유는, fork()의 리턴값을 받아 이를 조건문에 활용해 다른 작업을 수행할 수 있도록 하기 위해서이다. 자식프로세스가 생성되면 사용자 문맥..

[운영체제] 상태천이 / PCB / 시스템 호출, 인터럽트, 문맥교환의 연계

상태 천이 (State Transition) 실제로 프로세스는 단순히 중단, 실행의 상태만 있는 것이 아니라 더 다양한 상태가 존재한다. (이는 운영체제의 종류에 따라 다양하지만 대표적인 5가지 상태인 생성,준비, 실행, 대기, 종료에 대해서만 알아보도록 하겠다.) 이러한 프로세스의 상태가 바뀌는 것을 '프로세스 상태 천이'라고 한다. 각각의 상태는 모두 연관되어 있다. 이러한 상태 천이는 상태천이도로서 설명된다. (참고 : https://sungjk.github.io/2016/05/20/Scheduling.html) 생성(new) , 종료(terminated) : 프로세스가 생성 중일 땐 생성(new) 상태가 되고, 프로세스 실행이 종료하면 종료(terminated) 상태가 된다. 준비(ready) :..

[운영체제] 프로세스 / 문맥 / 문맥교환

프로세스 정의 프로세스 : 실행 중인 프로그램. 어떤 프로그램이 임의 시점에서 실행되고 있다면 그를 프로세스라고 한다. 프로그램은 저장장치(하드디스크)에 존재한다. 프로그램이 CPU가 이를 다룰 수 있도록 메인 메모리에 탑재되면 프로세스가 된다. 이들은 시스템 콜을 통해서 커널의 통제하에 시스템의 자원을 경쟁하는 주체들이다. 시분할 시스템에서는 임의의 시점에 여러 프로세스가 동시에 수행하는 경우도 있다. 이를 멀티태스킹(혹은 멀티 프로세싱, 태스킹과 프로세싱은 같은 용어라고 봐도 무방)이라고 한다. 프로세스는 그 주체에 따라 두가지로 나뉜다. 응용 프로그램이 실행되면 이는 사용자 프로세스라고 하고, 운영체제가 필요에 의해 생성하는 프로세스는 시스템 프로세스라고 한다. 문맥과 문맥교환 프로세스의 문맥(co..

[운영체제] 보호 / 캐시 / 부트스트래핑 / 커널의 종류

이중모드와 모드비트 '보호'라는 것은 기본적으로 커널의 모든 데이터가 응용 프로그램 등의 영향에 의해 손상되지 않도록 하는 것을 의미한다. 하지만 커널의 구성요소는 다양하다. 이 모든 것에 대해 하나하나 보호 방법을 강구하는 것을 매우 소모적이다. 따라서 보다 근본적이고 연쇄적으로 작용할 수 있는 해결법을 찾는 것이 중요하다. 이중모드 : 커널 모드와 사용자 모드 모두를 분리하는 방식이다. 메인 메모리를 사용자 공간과 커널 공간으로 나누고 CPU가 사용자 공간 프로그램을 수행할 때는 사용자 모드로, 커널 공간 프로그램을 수행할 때는 커널 모드로 동작하도록 한다. 즉, 어떤 응용 프로그램에서 커널이나 다른 프로그램의 오동작을 야기 시킬 수 있는 함수(코드)를 사용해야 할 때 커널 모드로 전환하여 이를 수행..

[운영체제] 입출력시스템

입출력 시스템의 일반적 구성 입출력 장치는 '시스템 버스'와 연결되어야 하는데, 물리적인 입출력장치가 바로 시스템버스에 접속되어 있는 것은 아니고 '제어기'를 통해서 연결이 된다. 즉, 장치 제어기가 시스템 버스와 연결되어 있다. 응용 프로그램이 시스템 콜을 통해 커널의 파일 시스템 및 디바이스 드라이버에 연결되고, 커널의 다바이스 드라이버가 장치 제어기를 통해 입출력 장치 자체와 연결된다. 즉, 응용 프로그램이 시스템 콜을 호출하면 이 호출이 커널의 디바이스 드라이버에게 전달되고, 디바이스 드라이버는 하드웨어인 장치 제어기와 명령 및 정보를 주고받으며 작업을 수행하고, 이러한 작업을 통해 입출력 장치가 통제되게 되는 것이다. 디바이스 드라이버와 장치제어기의 상호작용 (하드웨..