목록분류 전체보기 (43)
tlov
동시다발적으로 실행되는 프로세스 또는 스레드들은 서로 협력하며 영향을 주고 받는다.이 과정에서 자원의 일관성을 보장해야 한다. 아래에서는 프로세스 단어만 언급하지만, 실제로는 스레드에도 적용되는 내용이다. 동기화의 의미공동의 목적을 이루기 위해서 동시에 협력하며 수행되는 프로세스들이 있다. 가령 워드 프로세서 프로그램이 있다면 맞춤법을 검사해주는 프로세스, 화면에 출력해주는 프로세스 등이 포함될 수 있다. 하지만 이러한 프로세스들이 마구잡이 수행되어도 괜찮을까? 아니다. 올바른 수행을 위해서는 프로세스들이 동기화 되어야 한다. 왜냐면, 자원의 일관성을 보장해야 하기 때문이다. 동기화란 프로세스들의 수행 시기를 맞추는 것이다. 크게 두 가지로 나뉜다.1. 실행 순서 제어 : 프로세스를 올바른 순서대로 실행..
7가지의 CPU 스케줄링 알고리즘1. 선입 선처리 스케줄링2. 최단 작업 우선 스케줄링3. 라운드 로빈 스케줄링4. 최소 잔여 시간 우선 스케줄링5. 우선순위 스케줄링6. 다단계 큐 스케줄링7. 다단계 피드백 큐 스케줄링 1. 선입 선처리 스케줄링= FCFS(First Come First Serverd) 스케줄링 단순하게 준비 큐에 먼저 들어온 프로세스부터 처리하는 '비선점' 스케줄링이다. 이게 가장 직관적이고 공정해보이지만 굉장히 큰 부작용을 야기하는 알고리즘이다. 그 부작용은 프로세스들이 CPU를 할당받는 시간이 매우 길어질 수 있다는 것이다. 예를 들어 17ms의 실행 시간을 가진 프로세스 A, 실행 시간 5ms를 가진 프로세스 B가 차례대로 들어왔을 때 프로세스 B는 더 짧은 실행 시간을 가졌..
CPU 스케줄링?운영체제가 프로세스들에게 공정하고 합리적으로 CPU 자원을 배분하는 것이다. 해당 작업의 목표는 CPU가 쉬지 않고 주어진 시간동안 많은 작업을 하며 프로세스들간의 짧은 응답시간을 갖는 것이다. CPU 스케줄링은 다음과 같은 상황에서 발생한다.1. 실행 상태 -> 대기 상태2. 실행 상태 -> 준비 상태3. 대기 상태 -> 준비 상태4. 종료 상태 프로세스 우선순위어떤 방식이 가장 합리적인 CPU 스케줄링일까?가장 먼저 생각해볼 수 있는 방법은 CPU를 사용하고 싶어하는 프로세스들이 차례대로 CPU 자원을 할당받는 것이다. 하지만, 이 방법이 생각만큼 좋은 방법은 아니다. 왜냐면 빨리 처리해야 하는 프로세스들이 있기 때문이다. 즉, 프로세스마다 우선순위가 다르기 때문이다. 일반적으로 입..
스레드(thread)는 프로세스를 구성하는 실행 흐름의 단위이다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. 지금까지는 단일 스레드 프로세스를 상정하고 설명하였다. 하지만 현재 존재하는 프로그램은 대부분 여러 스레드를 가지는 멀티 스레드 프로세스이다. 스레드가 여러 개라면 프로세스를 이루는 여러 명령어를 동시에 실행이 가능하다. 그럼, 어떻게 스레드가 별도로 실행될 수 있을까? 어떻게 실행흐름 단위를 스레드로 나누어 실행할 수 있을까? 스레드의 구성요소스레드 ID, 레지스터 값, 스택 등실행에 필요한 최소 정보 스레드는 각각 스택, 레지스터 값들을 따로 갖고는 있지만 프로세스의 자원을 공유하면서 실행된다. 즉, 스레드 별로 어떤 메모리 공간이 할당되는 것이 아니라 프로세스에게 할당된 메모리..
프로세스는 저마다의 상태를 가지고 있다. 운영체제는 이러한 상태를 PCB에 저장하여 활용한다. 그리고 운영체제는 이처럼 동시에 실행되는 각기 다른 상태의 프로세스들을 계층적으로 관리한다. 프로세스 상태- 생성 상태 ㄴ 이제 막 메모리에 적재되어 PCB를 할당 받은 상태 ㄴ 언제든지 CPU를 할당받아 실행할 수 있게되면 준비 상태가 된다.- 준비 상태 ㄴ 당장이라도 CPU를 할당 받아 실행 할 수 있는 상태. ㄴ 하지만, 아직 차례가 되지않아 준비 중인 상태이다. ㄴ 자신의 차례가 되면 실행 상태로 바뀌는데 이를 dispatch라고도 한다.- 실행 상태 ㄴ CPU를 할당받아 실행 중인 상태 ㄴ 할당된 시간을 모두 사용하면 준비 상태로 바뀐다. ㄴ 실행 도중 입출력 장치를 사용하면 이 작업이 ..
더블 클릭하거나 커맨드 라인을 통해 저장 장치에 저장된 어떤 응용 프로그램을 실행하면 운영체제는 이를 메모리에 적재하고 실행한다. 이 때 실행되는 프로그램은 '프로세스(Process)'가 된다. 이러한 과정을 프로세스를 생성한다고 한다. 프로세스는 크게 두 가지로 나눌 수 있다.1. 포그라운드 프로세스 (foreground process) - 사용자가 볼 수 있는 공간에서 실행되는 프로세스 (ex. 웹 브라우저, 게임, 워드 ...)2. 백그라운드 프로세스 (background process) - 사용자가 볼 수 없는 공간에서 실행되는 프로세스 - 사용자와 직접 상호작용이 가능한 백그라운드 프로세스 - 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스 (데몬, 서비스) 프로..
- 커널이란?- 운영체제의 서비스 종류- 시스템 콜과 이중 모드란? 운영체제는 굉장히 방대한 프로그램이다. 세상에는 다양한 종류의 운영체제가 있다.그렇기에 운영체제가 프로그램에 제공하는 기능은 정말 다양하다. 하지만, 가장 핵심적인 서비스는 존재한다.이러한 운영체제의 핵심 서비스를 담당하는 부분을 '커널(Kernel)'이라고 한다. 운영체제에는 속하지만 커널에 속하지 않는 기능 -> UI; User Interface 이중모드와 시스템 호출사용자가 실행하는 프로그램은 자원에 직접 접근할 수 없다. 자원에 직접 접근하는 것은 위험하다. 왜냐면, 예를 들어 응용 프로그램이 SSD나 HDD와 같은 저장장치에 직접 접근하여 어떤 파일을 수정한 경우 만약 수정 전, 후로 다른 응용 프로그램이 이 자원에 접근하였다..
윈도우, 맥 OS, iOS, Lunux, 안드로이드 등등... 수 많은 운영체제가 컴퓨터 혹은 휴대폰에서 사용되고 있다. 도대체 운영체제가 무엇이길래 따로 공부해야할만큼 중요한 것일까? 왜, 개발자는 왜 운영체제를 알아야할까? 모든 프로그램은 실행을 위해 (시스템)자원을 필요로 한다.ㄴ 자원 : 프로그램 실행에 있어서 마땅히 필요한 요소ㄴ 자원에는 컴퓨터의 네 가지 핵심 부품이 포함된다.ㄴ 하드웨어만을 자원이라고 칭하지는 않는다. 운영체제는 실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.운영체제 또한 프로그램이기 때문에 메모리에 적재되어 실행된다. 하지만, 운영체제는 컴퓨터의 실행에서 중요한 역할을 하기 때문에 따로 메모리에 적재되는 영역이 할당되어 있는..