a program that acts as an intermediary between a user of a computer and the computer hardware
컴퓨터 시스템 아키텍쳐
운영체제의 작동 과정의 기초 개념들 입니다.
프로세스= 실행중인 프로그램 = active entity / 프로그램 = 메모리에 저장된 명령어들의 집합 = passive entity
프로그램과 서비스 실행 환경을 유저와 프로그램에게 제공하는 역할을 합니다. (대표적으로 9개)
프로그램 개발, 실행에 있어서 편리한 환경을 제공합니다. 파일 관리, 저장, 프로그램 언어, 프로그램 로딩 및 실행, 통신, 백그라운드 서비스, 어플리케이션 프로그램(OS를 살 때 따라오는 프로그램들)
OS 구현에 사용되는 구조들 입니다.
운영체제는 프로세스 형태로 동작하는 다양한 프로그램을 실행합니다. 프로세스 = 실행중인 프로그램 = active entity프로그램 = 디스크 상에 있는 코드들의 집합 = passive entity. 프로세스는 무조건 순차적으로 실행됩니다.
부모 프로세스는 자식 프로세스를 생성합니다. 이 때, 트리 구조로 프로세스를 생성합니다. 그리고 관리하기 위해서 프로세스는 생성될 때 process identifier (pid) 를 부여받습니다.
프로세스간 통신입니다! 프로세스는 독립적(independent)일 수도, 협력적(cooperating)일 수도 있습니다. 서로 협력적인 경우에는 데이터 공유가 필요합니다.
최근의 대부분의 어플리케이션은 Multi-THreaded 입니다. 그럼 쓰레드란 ?!한 프로세스에 속하면서 별도의 실행 흐름을 가질 수 있는 것이라고 할 수 있습니다. 하나의 프로세스는 여러 개의 실행 흐름을 가질 수 있습니다.
병렬성(parallelism) 이란, 시스템에 둘 이상의 코어가 있어서 둘 이상의 테스크를 동시에 실행할 수 있는 환경을 말합니다. 동시성(concurrency) 이란, 작업이 동시에 실행되는 것 처럼 보이게 하는 것 입니다.
쓰레드에는 2가지가 있습니다. 유저 쓰레드와 커널 쓰레드.
쓰레드 개수가 증가할수록 명시적으로 제어하면 다루기가 매우 어려워집니다. 따라서 쓰레드의 생성과 관리를 프로그래머가 아닌 컴파일러 혹은 런타임 라이브러리로 다루는 방법이 등장하였습니다. 5가지 방법이 존재합니다.
Multi-Threaded application의 한 쓰레드가 fork()를 호출하면 새로운 프로세스는 모든 쓰레드를 복제해야 할까요?!?! fork()는 호출한 쓰레드만 복제 ?! 아님 전부 다 ?!
ready queue에 있는, 실행이 준비된 프로세스들 중에서 무엇을 먼저 실행할 것인지를 결정하는 것이 CPU Scheduling 입니다.CPU utilization을 최대화하기 위해서는 Multi-Programming이 필수적입니다.
스케줄링 알고리즘 종류에는 FCFS, SJF, SRTF, Priority, Round-Robin, Multi-level Queue, Multi-level Feedback Queue 등이 있습니다.
쓰레드는 유저-레벨 쓰레드와 커널-레벨 쓰레드로 구분됩니다. 쓰레드를 지원한다면, 사실 프로세스-스케줄이 아니라 쓰레드-스케줄을 지원하는 것 입니다.
프로세스는 동시에 실행 가능합니다. Shared data에 대한 Concurrent access는 데이터 일관성 문제가 발생하게 됩니다. 이를 위해 협력적 프로세스들 간의 실행 순서를 정해야 합니다.
Critical Section Problem 해결을 위한 Peterson Solution과 memory barrier 입니다.
하드웨어 명령어들은 복잡하기 때문에 성능과 프로세스 실행에 있어서 문제를 일으킬 수 있습니다. 따라서 커널 라이브러리를 통해 기능을 제공합니다. 그 중 가장 간단한 방법이 Mutex lock 입니다.
procedure 안에서만 내부 변수에 접근할 수 있으며, 오직 하나의 프로세스만 monitor 내에서 작동할 수 있습니다.
Memory barrier instruction 이 수행되면, 시스템은 현재까지의 load and store 명령어들이 barrier 이후의 load and store 이전에 완료되도록 보장합니다.