Computer Science/OS

Computer Science/OS

동기, 비동기

동기, 비동기 여기서의 동기, 비동기는 프로그래밍 영역이랑 관련이 있다. 개발을 하다보면 "동기 또는 비동기적으로 수행한다" 라는 말을 종종 듣게 된다. 무슨 의미일까? 동기, 비동기는 실행 순서에 관한 개념이다. 동기 코드는 위에서부터 아래로 순차적으로 수행된다. 그래서 순차 코드라고 불리기도 한다. 만약 중간에 I/O 코드가 있으면 I/O 작업이 끝날때까지 대기한 후 다음 코드를 실행한다. 비동기 코드는 순차적으로 실행되지 않는다. 비동기 코드가 수행된 시점부터 프로그램의 실행 순서를 특정할 수 없으며 아래처럼 실행 순서는 3가지 경우로 나눠진다. 비동기 코드가 먼저 수행 다음의 동기 코드가 먼저 수행 비동기 코드와 다음의 동기 코드가 동시 수행 비동기 코드는 실행 순서를 특정할 수 없게 만들어 프로..

Computer Science/OS

[OS - 7] 프로세스 동기화

프로세스 동기화 프로세스(또는 스레드)는 동시에 그리고 병렬로 실행된다. CPU 코어는 각 프로세스를 빠르게 전환해 실행함으로써 프로세스는 동시에 실행된다. 또한 각 CPU 코어는 하나의 프로세스를 실행함으로써 프로세스는 병렬로 실행된다. 이 같은 동작 방식은 CPU 사용률을 높이지만 한 가지 문제가 있다. 두 개 이상의 프로세스가 공유 데이터에 동시 접근할경우 데이터의 일관성이 깨질 수 있다. 이와 같은 상황은 매우 빈번하게 발생한다. 아래는 예시 상황이다. 두 개 이상의 스레드가 힙 영역, 데이터 영역의 데이터에 동시 접근 두 개 이상의 프로세스가 파일, 메모리, 소켓, 외부 장치 등 컴퓨터 자원 또는 OS의 자원에 동시 접근 두 개 이상의 커널 모드 프로세스가 커널 자료구조(열린 파일 목록 리스트,..

Computer Science/OS

[OS - 6] CPU 스케줄링

CPU 스케줄링 멀티 프로그래밍, 멀티 태스킹의 목적은 여러 프로세스를 동시에 실행해 CPU의 유휴 시간을 최대한 줄이는 것이다. 다중 코어 시스템에서는 모든 CPU 코어의 사용량이 최대가 되도록 유지하는 것으로 확장된다. 멀티 프로그래밍 환경에서 핵심은 CPU 자원의 스케줄링이다. CPU 스케줄링은 CPU(또는 CPU 코어) 할당을 기다리는 여러 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 선택하는 것을 말한다. 그리고 CPU 스케줄링을 수행하는 모듈을 스케줄러라고 한다. 그러면 어떻게 CPU 스케줄링을 해야 효율적일까? 이번 장에서는 여러 CPU 스케줄링 알고리즘을 알아본다. CPU - I/O 버스트 사이클 프로세스의 실행은 CPU 버스트와 I/O 버스트의 사이클로 구성된다. CPU 버스트는 ..

Computer Science/OS

[OS - 5] 스레드

스레드 예전의 프로세스는 단일 실행 스레드(single thread of execution)을 가졌다면 지금의 프로세스는 여러 개의 스레드를 가져 여러 개의 실행 흐름을 가지게 되었다. 예전에는 프로세스가 여러 개의 실행 흐름을 가지기 위해 새 프로세스를 생성했다. 하지만 프로세스를 생성하는 건 많은 시간과 자원이 요구되는 작업이며 같은 일을 하는 프로세스를 여러 개 두는건 매우 비효율적이다. 때문에 경량화된(light-weight) 프로세스인 스레드가 등장했다. 스레드는 원래 실타래, 프로그램 실행 흐름을 의미하는 용어였다. 멀티스레딩 시스템에서 CPU를 점유하는 단위는 프로세스가 아닌 스레드이다. 스레드는 경량화된 프로세스(Light-Weight Process, LWP)이다. 스레드는 스레드 ID, ..

Computer Science/OS

[OS - 4] IPC

IPC 프로세스는 독립적인 프로세스이거나 협력적인 프로세스이다. 독립적인 프로세스 : 다른 프로세스와 아무런 데이터도 공유하지 않는 프로세스 협력적인 프로세스 : 다른 프로세스에 영향을 주거나 받는 프로세스 또는 다른 프로세스와 데이터를 공유하는 프로세스 협력적인 프로세스들은 서로 간 데이터를 주고 받을 수 있는 프로세스 간 통신(interprocess communication, IPC) 기법이 필요하다. IPC에는 공유 메모리(shared-memory)와 메시지 전달(message-passing) 모델이 있다. 어떻게 하면 프로세스 간 데이터를 주고 받을 수 있을까? 프로세스가 다른 프로세스 메모리에 접근하는 것은 매우 위험하므로 OS에 의해 금지된다. 쉬운 방법은 프로세스들이 서로 접근할 수 있는 공..

Computer Science/OS

[OS - 3] 프로세스

프로세스 비공식적으로, 프로세스는 실행 중인 프로그램이다. 프로그램이 명령어 리스트를 저장한 파일(실행 파일)과 같은 수동적인 존재(passive entity)라면 프로세스는 프로그램 카운터 및 관련 자원을 가진 능동적인 존재(active entity)이다. 프로세스는 아래의 자원들을 가진다. 레지스터 (PC, IR 등) cpu time 메모리 파일 I/O 디바이스 메모리 배치 프로세스의 메모리 배치는 일반적으로 여러 섹션으로 구분되며 아래의 섹션을 포함한다. 텍스트 섹션 - 실행 코드 데이터 섹션 - 전역 변수 힙 섹션 - 프로그램 실행 중 동적으로 할당되는 메모리 스택 섹션 - 함수를 호출 시 임시 데이터 저장 장소(함수 매개변수, 복귀 주소, 지역 변수) 텍스트와 데이터 섹션은 크기가 고정되어 있으..

Computer Science/OS

[OS - 2] 운영체제 개요 (2)

운영체제 컴퓨터 하드웨어를 관리하는 소프트웨어이며 유저, 응용 프로그램과 하드웨어간의 연결점(Intertace) 역할을 수행한다. 컴퓨터 시스템 구성 전통적인(classical) 컴퓨터 시스템은 하나 이상의 CPU와 다수의 디바이스 컨트롤러가 버스를 통해 연결되어 있다. 디바이스 컨트롤러는 특정 유형의 장치를 담당하며 로컬 버퍼 저장소와 특수 목적 레지스터 집합을 유지 관리한다. 장치 컨트롤러마다 장치 드라이버(device driver)가 있다. 이 장치 드라이버는 운영체제에게 장치에 대한 인터페이스를 제공한다. 인터럽트 CPU와 I/O 디바이스 간의 통신 방법 중 한가지로 하드웨어는 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다. CPU가 인터럽트되면 CPU는 하던 일을 중단하고 인터럽..

Computer Science/OS

[OS - 1] 운영체제 개요 (1)

컴퓨터 컴퓨터는 정보(information)를 처리하는 기계라고 한다. 정보는 뭘까? 정보의 최소 단위는 두 가지 상태(0, 1)을 나타내는 bit이다. 이 bit가 모인 이진 데이터가 정보이다. 그렇다면 정보를 어떻게 처리할까? 정보를 처리는 비트의 상태 변환(0에서 1로, 1에서 0으로)과 같다. 정보를 처리하려면 비트의 상태 변환을 할 수 있는 물리적인 장치가 필요하고 이 장치가 논리 회로가 된다. 논리 회로 논리 게이트는 불 대수를(Boolean algebra) 구현한 물리적인 장치다. NOT, AND, OR, XOR, NAND, NOR 게이트가 있다. 불 대수는 수의 범위가 오직 0 또는 1인 수의 논리적 계산을 수학적으로 표현한 것이다. 현대 수학의 수가 실수와 허수로 이루어져 매우 복잡하다면..

gunjoon98
'Computer Science/OS' 카테고리의 글 목록