페이징(Paging)이란? 페이징이란 논리주소의 메모리를 고정된 크기의 페이지(Page)로 나누어 관리하는 기법이다. 페이징은 아래와 같은 특징들을 갖고 있다. 물리주소 공간(Physical address)은 연속적이지 않을 수 있다(noncontiguous) 페이지는 모두 같은 크기를 가진다. 물리주소 공간을 페이지와 같은 사이즈로 나눈 것들을 프레임(Frame)이라고 한다. 페이지 사이즈(=프레임 사이즈)는 하드웨어에 의해 정해진다. 페이지의 크기는 일반적으로 2의 제곱수를 사용한다. 일반적으로 4KB(2^12) ~ 1GB(2^20) 페이지 테이블(page table)을 이용해 논리주소에서 프레임을 가리키는 물리주소로 매핑한다. 외부 단편화는 발생하지 않으나, 내부 단편화는 발생한다. 단편화에 대해서..
내부 단편화 (Internal Fragmentation) 내부 단편화란 주기억장치 내 사용자 영역이 실행 프로그램보다 커서 프로그램의 사용 공간을 할당 후 사용되지 않고 남게 되는 현상을 말한다. 예를 들어 아래와 같은 그림을 살펴보자. 위와 같이 100MB의 메모리에 80MB 크기의 프로세스를 올리게 되면, 20MB의 내부 단편화가 발생하게 된다. 즉, 적은 크기의 잔여 메모리가 발생해 해당 메모리를 사용할 수 없게 된다. 외부 단편화 (External Fragmentation) 외부 단편화란 남아있는 총 메모리 공간이 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적(contiguous)이지 않아 발생하는 현상이다. 예를 들어 아래와 같은 그림을 살펴보자. 위와 같이 남아있는 메모리 공간은 50..
동기화 문제 (Synchronization Problem) 동시에 공유 자원에 접근하는 것은 데이터의 일관성을 해칠 수 있다. 프로세스들의 실행 순서를 정하여 공유 자원의 일관성을 보장하는 것을 동기화(Synchronization)라고 한다. 경쟁 상태 (Race Condition) 여러 프로세스들이 공유 자원에 동시에 접근하려고 하는 상황을 경쟁 상태라고 한다. 어떤 프로세스가 마지막으로 데이터에 접근했는지에 따라 데이터의 상태가 달라지게 된다. 즉, 데이터의 일관성을 보장할 수 없어진다. 이런 경쟁 상태의 문제를 해결하기 위해 프로세스들은 동기화(Synchronized)되어야 한다. 임계 영역 (Critical Section) 임계 영역은 공유 자원이 접근되는 부분을 뜻한다. 만약 어떤 프로세스가 임..
CPU 스케줄링(CPU Scheduling)이란? CPU 이용률을 극대화하기 위해서는 멀티프로그래밍(multiprogramming)이 필요하다. 하지만 만약 CPU core가 하나라면 한 번에 하나의 프로세스만 실행 가능할 것이다. 이때 필요한 것이 CPU 스케줄링이다. 즉, CPU 스케줄링은 언제 어떤 프로세스에 CPU를 할당할지 결정하는 작업이라고 할 수 있다. CPU 스케줄러(CPU Scheduler)와 선점형(Preemptive), 비선점형(non-preemptive) 스케줄링 CPU 스케줄러는 메모리에 있는 프로세스들 중 어떤 프로세스를 실행할지 선택하고 CPU를 할당해주는 역할을 한다. CPU 스케줄러는 프로세스들이 다음과 같은 상황에 있을 때 스케줄링을 결정한다. 실행(running) 상태에..
사용자 수준 쓰레드(User level Thread) vs 커널 레벨 쓰레드(Kernel Level Thread) 사용자 수준 쓰레드는 사용자 수준(user level)에서 실행되며 thread library에 의해 관리된다. 커널 수준 쓰레드는 커널 수준(kernel level)에서 실행되며 커널에 의해 직접 관리된다. 이런 커널을 멀티쓰레드 커널(Multithreded kernel)이라고 부른다. - 현대 대부분의 OS가 멀티쓰레드 커널이다. 사용자 수준 쓰레드와 커널 수준 쓰레드는 서로 맵핑(mapping)된다. non-multithreaded kernels에서 유저 수준 쓰레드는 일반적인 프로세스처럼 처리된다. 커널이 쓰레드를 인식할 수 없어 맵핑이 이루어지지 않기 때문이다. multithrede..
쓰레드란(Thread)란? 쓰레드(Thread)란 프로세스 내에서 실행되는 흐름의 단위 혹은 CPU 스케줄링의 기본 단위 라고 할 수 있다. 쓰레드는 다음과 같은 특징을 가지고 있다. 쓰레드는 각자 자신의 Stack 영역을 보유한다. ( 최소한 자신의 레지스터 상태를 보유한다 ) 쓰레드는 프로세스 내에서 Code, Data, Heap 영역을 공유한다. 쓰레드를 생성하고 switching 하는 것은 inexpensive(비싸지않은) 하다. 쓰레드와 프로세스 차이 쓰레드와 프로세스는 다음과 같은 차이들이 존재한다. 프로세스는 각자 프로세스간의 통신에 IPC가 필요하다. 쓰레드는 쓰레드 간의 통신에 IPC가 필요하지 않다. 각 프로세스는 Code, Data, Heap, Stack 영역을 각자 보유한다. 쓰레드..
IPC란? IPC는 Inter-Process Communication 의 줄임말로 프로세스간의 통신을 위한 메커니즘을 의미한다. 즉 IPC는 프로세스간의 통신을 돕는다. IPC는 다음과 같이 두 가지 모델이 존재한다. Shared Memory Message Passing 프로세스에 대해 자세히 알고 싶다면 다음을 참고하자. [운영체제] 프로세스란? 프로세스 메모리 구조, 상태, 스케줄링 프로세스(Process)란? 프로세스는 실행 중인 프로그램(program)을 뜻한다. 그렇다면 프로그램은 무엇인가? 프로그램은 명령어들의 모음을 포함한 디스크에 저장된 파일이다. 프로그램이 실행되면 이 code-lab1.tistory.com Shared Memory Shared Memory 방식은 말 그대로 프로세스들이 ..
프로세스 제어 블록(Process Control Block)란? 프로세스 제어 블록(이하 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다. 쉽게 말하면 운영체제가 프로세스를 제어하기 위해 프로세스의 상태 정보를 저장해 놓는 구조체이다. PCB는 다음과 같은 항목들을 저장하고 있다. Process Id : 프로세스의 고유 번호 Process State : ready, wait, running 등의 실행 상태 Program Counter(PC) : 프로그램 카운터, 다음 실행될 명령의 포인터 CPU registers : CPU 레지스터 CPU scheduling information : CPU 스케줄링 정보 Memory-management information..
fork() 함수란? Unix 환경에서 fork() 함수는 함수를 호출한 프로세스를 복사하는 기능을 한다. 이때 부모 프로세스와 자식 프로세스가 나뉘어 실행되는데, 원래 진행되던 프로세스는 부모 프로세스(parent), 복사된 프로세스를 자식 프로세스(child) 라고 한다. fork() 함수는 프로세스 id, 즉 pid 를 반환하게 되는데 이때 부모 프로세스에서는 자식 pid가 반환되고 자식 프로세스에서는 0이 반환된다. 만약 fork() 함수 실행이 실패하면 -1을 반환한다. 프로세스에 대해 잘 모르겠다면 다음을 참고하자. [운영체제] 프로세스란? 프로세스 메모리 구조, 상태, 스케줄링 프로세스(Process)란? 프로세스는 실행 중인 프로그램(program)을 뜻한다. 그렇다면 프로그램은 무엇인가?..
프로세스(Process)란? 프로세스는 실행 중인 프로그램(program)을 뜻한다. 그렇다면 프로그램은 무엇인가? 프로그램은 명령어들의 모음을 포함한 디스크에 저장된 파일이다. 프로그램이 실행되면 이 프로그램의 명령어들과 데이터가 메모리에 적재되고 이것이 프로세스가 된다. 프로세스의 메모리 구조 각 프로세스는 위 그림과 같은 구조를 갖는다. 각 영역은 다음과 같은 역할을 한다. Code 영역 : 프로그램을 실행시키는 실행 파일 내의 명령어들이 위치하는 공간 Data 영역 : 전역변수, static 변수들이 위치하는 공간 Heap 영역 : 동적할당을 위한 메모리 영역( malloc(), new 등) Stack 영역 : 지역 변수, 파라미터(함수에 전달되는 인자)가 위치하는 공간 프로세스 상태(Proces..