Operating System은 System Resource를 관리하는 역할을 한다. 시스템 자원은 CPU, Memory, HDD 등의 컴퓨터 하드웨어를 지칭한다.컴퓨터 하드웨어는 스스로 할 수 있는 것이 없기 때문에 OS가 이를 통제해 주어야 한다. 예를 들어 CPU
통상적으로 프로그램은 소프트웨어를 칭하며 소프트웨어는 크게 운영체제와 응용 프로그램으로 나눈다. 요즘에는 Application이 일반 PC에서 돌아가는 응용 프로그램을 말하고 스마트폰에서의 응용 프로그램을 App이라 한다.운영체제는 응용 프로그램을 관리한다. 즉 실행하
첫 번째 컴퓨터로 알려진 ENIAC이 등장하면서 OS의 역사도 시작되었다. 하지만 처음에는 운영체제가 없었고 단일 프로그램만 실행하며 해당 응용 프로그램에서 시스템 자원을 직접 제어했다.Batch Processing System프로그램의 종류도 많아지고 사용자도 증가하
Assembly 언어로 소프트웨어 개발CPU를 명령어로 제어, Memory 주소 직접 할당컴퓨터마다 재개발 필요프로그래밍 복잡도 높음C 언어 등장컴파일러를 통해 동일한 코드로 작성한 프로그램은 다른 컴퓨터에서도 동작프로그래밍 복잡도 낮음이때부터 C언어를 기반으로 운영체
응용 프로그램 대거 등장엑셀, 워드 프로세서 등Windows OS 대중화(PC 사용자 증가)네트워크 기술 발전인터넷 대중화오픈소스 운동UNIX OS + 응용 프로그램 소스 오픈LINUX OS 소스 오픈오픈소스 활성화LINUX OSApacheMySQL가상 머신, 대용량
운영체제는 응용 프로그램의 요청에 따라 메모리, CPU 시간, IO Device의 사용을 허가하고 분배 및 제어한다. OS에 관련한 관계도는 다음과 같다.사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램을 말하며 CLI, GUI 두 가지
CPU에도 권한에 따른 모드가 존재한다. 아래 그림과 같이 Protections Ring의 구조에 따르면 단계별로 나뉘어 있지만 현재는 User mode/Kernel mode만 사용한다.사용자 모드(user mode by applications)커널 모드(kernel
batch processing은 컴퓨터 프로그램 실행 요청 순서에 따라 순차적으로 프로그램을 실행하는 방식이며 한번에 등록된 여러 프로그램을 실행할 수 있다.하지만 하나의 프로그램이 끝날 때까지 다른 프로그램을 수행할 수 없어 동시에 진행하고자하는 요구사항에 부합하지
최대한 cpu를 많이 활용하도록 하는 시스템으로 시간 대비 CPU 활용도를 높이고자 하는 요구사항에서 비롯되었다. 응용 프로그램은 온전히 CPU를 사용하기 보다 도중에 다른 작업을 필요로 하는 경우가 많아 그 사이 CPU가 쉬는 타이밍이 발생한다.메모리 계층은 다음과
메모리에 올려져서 실행 중인 프로그램을 프로세스라고 한다. 실행 파일은 코드 이미지라고 한다. 하지만 응용 프로그램을 프로세스라고 볼 수만은 없다. 응용 프로그램은 보통 여러 개의 프로세스로 이루어 질 수 있기 때문이다.프로세스라는 용어는 작업, task, job이라는
멀티프로그래밍은 CPU 활용도를 극대화 하는 스케쥴링 알고리즘이다. 아래 그림과 같이 각 프로세스들이 존재할 때 Wait 파트를 파일 읽기를 하는 시간으로 가정한다면 CPU에서 진행되는 순서는 Combinded 처럼 될 것이다.프로세스 상태는 크게 3가지로 분류가 된다
Preemptive Scheduling : 하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지 할 수 있음Non-preemptive Scheduling : 하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU 사용 불가선점형의 경우 running 상태인
CPU가 프로그램을 실행하고 있을 때 입출력 하드웨어 등의 장치나 또는 예외 상황이 발생하여 처리가 필요할 경우 CPU에 알려 처리하는 기술을 말한다.인터럽트가 필요한 이유는 3가지 정도로 정리할 수 있다.선점형 스케쥴러 구현IO Device와 커뮤니케이션예외 처리이전
프로세스는 다음과 같이 4가지 영역으로 나눌 수 있다.text(code) : 일반 코드가 존재data : 변수/초기화된 데이터가 존재stack : 임시 데이터(함수 호출, 로컬 변수 등)이 존재heap : 코드에서 동적으로 생성되는 데이터위에서 언급한 바와 같이 프로그
프로세스의 4 영역 중 하나인 HEAP 영역은 동적 할당 된 데이터의 주소가 존재하는 곳이며 C언어에서는 malloc 함수를 통해 제어한다. 반대로 메모리 해제 시에는 free함수를 사용한다.메모리 할당/해제에 관련된 라이브러리는 <stdlib.h>이다프로세스의
이전에 여러 프로세스들을 아주 짧은 시간동안 교체하면서 실행하는 것을 컨텍스트 스위칭이라고 했다. 이제 Program Counter와 Stack Pointer의 동작에 주목하면서 과정을 훑어 본다.다음과 같이 프로그램이 2개가 존재하고 각각 해당하는 프로세스를 Proc
Context Switching이란 CPU에서 실행할 프로세스를 교체하는 기술을 말하며 이전 시간에 알아본 컨텍스트 스위칭의 원리를 다시 정리해본다.컨텍스트 스위칭은 크게 다음과 같은 두 동작으로 구분할 수 있다.실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업
프로세스들이 서로의 공간을 쉽게 접근할 수 있다면 프로세스 데이터/코드가 변경될 수 있기 때문에 아주 위험한 상황이 초래될 수 있다. 따라서 프로세스는 다른 프로세스의 공간을 접근할 수 없도록 설계되었다.하지만 프로세스 간 커뮤니케이션의 필요성이 존재했기에 프로세스 간
파이프는 기본적으로 단방향 통신이며 fork()로 자식 프로세스를 만들었을 때 부모/자식 간 통신을 가능하게 한다.다음 예제에서 볼 수 있는 것처럼 fork()를 통해 자식 프로세스를 생성하며 부모 프로세스에는 실제 ID(Integer)값이 들어가며 자식 프로세스에는
Light Weight Process라고도 불리며 프로세스 내에 다중으로 존재할 수 있는 작업 단위이다. 스레드들은 동시에 실행 가능하다.프로세스 간 데이터 접근이 불가한데 반해 스레드는 가능스레드들은 각기 실행가능한 스택이 존재하며 프로세스와 마찬가지로 레지스터 내
사용자에 대한 응답성 향상자원 효율 향상IPC 기법처럼 자원공유를 위한 부수 작업 필요 없음프로세스 내에 있어 프로세스 데이터 접근 가능코드 간결성 유지쓰레드 상호 과의존쓰레드 중 한 쓰레드만 문제가 생겨도 전체 프로세스가 영향을 받는다.성능 저하다중 쓰레드 존재 시
동기화란 작업이 병렬로 진행 될 때 각 실행 작업의 시점을 일치시키는 것을 말한다. 특히 여러 쓰레드가 동일한 자원(데이터)에 접근 시 동기화 이슈가 발생하며 동일 자원을 동시 수정 시 각 쓰레드 결과에 영향을 준다.다음 파이썬 코드를 보면 쓰레드를 50개 생성하여 1
Critical Section에 대한 접근을 막기 위해 Locking 메커니즘이 필요하다. Mutex(binary semaphore)임계 구역에 하나의 쓰레드만 들어갈 수 있음Semaphore다음과 같이 S값이 0일 때 대기하는 기능을 위해서 S값이 복귀될 때까지 반복
교착상태란 무한 대기 상태를 뜻하며 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 다음 단계로 진행하지 못하는 상태를 말한다.다음 네 가지 조건이 모두 성립할 때 교착상태 발생 가능성이 있다.상호배제(Mutual exclusion) : 프
실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기의 한계가 있다. 리눅스의 경우 하나의 프로세스 마다 4GB를 필요로 하나 통상 메모리는 8~16GB이다.폰 노이만 구조이므로 코드는 메모리에 반드시 있어야 한다.하나의 프로세스만 실행하는 배치 처리 시스템에
크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리하는 것이다. 하드웨어의 지원이 필요하며 페이지 번호를 기반으로 가상 주소/물리 주소 매핑 정보를 기록하고 사용한다.Intel x86(32bit) -> 4KB, 2MB, 1GB 지원리눅스 ->
32bit 시스템에서 4KB 페이지를 위한 페이징 시스템은 하위 12bit는 오프셋이며 상위 20bit가 페이징 번호이므로 2의 20승 개의 페이지 정보가 필요하다.이 때 페이지 정보를 단계를 나누어 생성하면 필요없는 페이지는 없애고 공간 절약이 가능하다.페이지 번호를
Demand Paging은 프로세스 모든 데이터를 메모리에 적재하지 않고 실행 중 필요한 시점에서만 메모리로 적재한다. 더 이상 필요하지 않은 페이지 프레임은 다시 저장 매체에 저장한다. (교체 알고리즘 필요)선행 페이징(anticipatory paging)의 반대 개
운영체제가 특정 페이지를 물리 메모리에 올리려 하는데 물리 메모리가 더 이상 공간이 없다면 기존 페이지 중 하나를 물리 메모리에서 저장 매체에 저장하고 새로운 페이지를 해당 물리 공간에 올린다.이 때 페이지를 결정하는 것이 Page Replacement Algorith
가상 메모리를 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할하는 것을 말한다. 페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할하는것과 차이가 있다.예를 들어 x86 리얼모드에서는 CS(Code Segment), DS(Data Segment)
비트로 관리하기에는 오버헤드가 너무 크므로 초기에는 블록 단위로 저장 매체에 관리를 하게되었다. (보통 4KB) 블록마다 고유 번호를 부여하여 관리를 했다. 하지만 이마저도 용량이 늘어나면 각 블록 고유 번호를 관리하기 어려운 지경에 이르렀고 따라서 추상적(논리적) 객
파일 시스템의 기본 구조로 다음과 같은 3가지 블록으로 구분된다.수퍼 블록 : 파일 시스템 정보아이노드 블록 : 파일 상세 정보데이터 블록 : 실제 데이터수퍼 블록은 파일 시스템 정보 및 파티션 정보를 포함한다. 파일은 inode 고유값과 자료구조에 의해 주요 정보를
33. 부팅
하나의 하드웨어에 다수의 운영체제를 설치하고 개별 컴퓨터처럼 동작하도록 하는 프로그램을 말한다.하이퍼바이저(or VMM)은 운영 체제와 응용 프로그램을 물리적 하드웨어에서 분리하는 프로세스를 말한다. 이 하이퍼바이저 혹은 버추얼 머신 모니터(VMM)라고 하는 소프트웨어
리눅스 커널(운영체제) + 시스템 프로그램(쉘) + 응용 프로그램으로 구성되어 있으며 다음과 같은 구성으로 이루어져 있다.Shell은 사용자와 컴퓨터 하드웨어 또는 운영체제 간 인터페이스를 말한다.사용자의 명령을 해석하여 커널에 명령을 요청해주는 역할관련 시스템 콜을