꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

운영체제 (OS) 30

가상 머신(Virtual Machine)

하나의 하드웨어에 다수의 운영체제를 설치하고, 개별 컴퓨터처럼 동작하도록 하는 프로그램입니다. Virtual Machine Type1 (native / bare metal) 하이퍼 바이저(VMM)는 운영체제와 응용 프로그램을 물리적 하드웨어에서 분리하는 프로세스입니다. 하이퍼바이저 또는 버추얼 머신 모니터라고 하는 소프트웨어가 Hardware에서 직접 구동합니다. Virtual Machine Type2 하이퍼바이저 또는 버추얼 머신 모니터라고 하는 소프트웨어가 Host OS상위에 설치됩니다. 전가상화 각 가상머신이 하이퍼바이저를 통해서 하드웨어와 통신합니다. 하이퍼바이저가 마치 하드웨어인 것처럼 동작하기 때문에 가상머신의 OS는 자신이 가상 머신인 상태인지 모릅니다. VMM이 통역사 역할을 하게 됩니다...

운영체제 (OS) 2021.04.25

부팅의 이해

Boot 컴퓨터를 켜서 동작시키는 절차입니다. Boot 프로그램은 운영체제 커널을 Storage에서 특정 주소의 물리 메모리로 복사하고 커널의 처음 실행위치로 PC를 가져다 놓는 프로그램입니다. 컴퓨터를 키면 BIOS가 특정 Storage를 읽고 bootstrap loader를 메모리에 올리고 실행합니다. bootstrap loader 프로그램이 있는 곳을 찾아서 실행시킵니다. bootstrap loader가 실행되면 파티션 table을 통해서 메인 파티션을 파악합니다. 메인 파이션에서 부트 섹터에 접근해서 부트 코드를 로드합니다. 그 후 커널 이미지를 읽어와서 운영체제를 실행합니다.

운영체제 (OS) 2021.04.24

파일 시스템의 이해

파일시스템 운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘입니다. 파일 시스템이 만들어진 이유 처음에는 0과 1의 데이터를 저장하는 저장매체였습니다. 처음에 비트로 관리를 했었는데 오버헤드가 컸습니다. 이에 블록 단위로 관리하기 시작하였고 블록마다 고유 번호를 부여해서 관리를 하고 있습니다. 하지만 이 과정에서도 일반 사용자에게 블록 고유 번호를 관리하기에는 어려움이 있었습니다. 추상적 객체가 필요했는데 이를 파일이라고 합니다. 사용자는 파일 단위로 관리를 하게 되고 각 파일에는 블록 단위로 관리됩니다. 가능한 연속적인 공간에 파일을 저장하는 것이 좋습니다. 여기에 문제가 있었는데 파일의 크기가 변한다는 것이었습니다. 외부 단편화 문제가 발생하면서 불연속 공간에 파일 저장 기능 지원이 필요..

운영체제 (OS) 2021.04.24

가상 메모리 - 세그멘테이션

세그멘테이션 기법 가상 메모리를 서로 크기가 다른 논리적인 단위인 세그먼트(Segment)로 분할합니다. 페이징 기법의 경우 가상 메모리를 같은 크기의 블록으로 분할한다는 점에서 다릅니다. CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment)로 나눕니다. 세그먼트의 주소는 v = (s, d)로 구할 수 있습니다. s는 세그먼트 번호, d는 블록 내 세그먼트 변위입니다. 페이징 시스템과 유사합니다.

운영체제 (OS) 2021.04.23

페이지 교체 정책

FIFO 가장 먼저 들어온 페이지를 교체합니다. OPT 최적 페이지 교체 알고리즘으로 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체합니다. 일반 OS에서는 구현 불가능합니다. LRU 가장 오래 전에 사용된 페이지를 교체합니다. LFU 가장 적게 사용한 페이지를 교체합니다. NUR LRU와 마찬가지로 최근에 사용하지 않은 페이지부터 교체합니다. 각 페이지마다 참조 비트(R), 수정 비트(M)를 둡니다. (R,M) -> (0, 0), (0, 1), (1, 0), (1, 1) 순으로 페이지를 교체합니다. 번외-> 스레싱(Thrashing) 반복적으로 페이지 폴트가 발생해서, 과동하게 페이지 교체 작업이 일어나서 실제로는 아무일도 하지 못하는 상황을 스레싱이라 합니다.

운영체제 (OS) 2021.04.23

가상 메모리 - 페이징 시스템

크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리합니다. 이를 페이징이라 합니다. 페이징을 하기 위해서는 하드웨어 지원이 필요하며 리눅스의 경우 4KB로 페이징을 나누고 있습니다. 페이지 번호를 기반으로 가상 주소 혹은 물리 주소 매핑 정보를 기록하고 사용합니다. 페이징 시스템 프로세스의 PCB에 Page Table 구조체를 가리키는 주소가 들어있습니다. Page Table에는 가상 주소와 물리 주소 간 매핑 정보가 있습니다. page는 고정된 크기의 block(4KB)을 갖게 됩니다. 프로세스 생성 시, 페이지 테이블 정보를 생성하게 되는데 PCB 등에서 해당 페이지 테이블에 접근 가능하고 관련 정보는 물리 메모리에 적재돼 있습니다. 프로세스 구동 시, 해당 페이지 테이블 ..

운영체제 (OS) 2021.04.22

가상 메모리

리눅스의 경우 하나의 프로세스가 4GB를 갖습니다. 통상 보통 메모리는 8GB 혹은 16GB입니다. 코드는 메모리에 반드시 있어야 되는데, 실제 각 프로세스마다 충분한 메모리를 할당하기에는 메모리 크기가 한계가 있습니다. 이러한 문제를 해결하기 위해 가상 메모리가 나왔습니다. 메모리가 실제 메모리보다 많아 보이게 하는 기술입니다. 주소가 2개가 필요하게 됩니다. virtual address(가상 주소)는 프로세스가 참조하는 주소입니다. 부분적으로 메모리에 올라가는 실제 메모리 주소를 physical address라고 합니다. MMU(Memory Management Unit) 가상 메모리 주소를 물리 주소로 빠르게 변환시켜주는 하드웨어입니다. CPU는 가상 메모리를 다루고, 실제 해당 주소 접근 시 MMU..

운영체제 (OS) 2021.04.22

스레드 교착 상태(Deadlock)와 기아 상태(Starvation)

교착 상태(Deadlock) 무한 대기 상태로, 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있어서 다음 단계로 진행하는 못하는 상태를 말합니다. 1. 상호배제 2. 점유대기 3. 비선점 4. 순환대기 위 4가지 조건이 성립될 때 Deadlock이 발생합니다. 조건 중에 일부를 성립이 안되도록 하면 해결할 수 있습니다. 기아 상태(Starvation) 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 말합니다. 교착 상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생하고, 기아 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원 할당이 안되는 경우에 주로 발생합니다. 기아 상태를 해결하기 위해서는 우선순위를 변경..

운영체제 (OS) 2021.04.22

스레드 동기화 문제

스레드는 실행 순서가 정해져있지 않습니다. 그렇다보니 순서가 꼬일 수 있는 오류가 있습니다. 이러한 오류를 동기화(synchronization) 이슈라고 합니다. 그래서 스레드 관리가 필요합니다. 동기화 이슈가 생기면 디버깅하기도 어렵습니다. 위 코드는 50개의 스레드를 생성하고 실행합니다. 스레드를 다 실행하고 나서 메인 스레드로 돌아오게 됩니다. join() 함수를 통해서 모든 스레드가 끝날 때까지 기다리게됩니다. 실제로 위 코드를 실행하면 실행할 때마다 결과값이 다릅니다. 만약 스레드 1이 덧셈까지만 동작하고 context switching 되고 다음 스레드 2에서도 덧셈까지만 하고 context switching이 되면서 스레드 1로 돌아오면 그때 g_count를 저장 하고 다시 스레드 2로 돌아..

운영체제 (OS) 2021.04.22

스레드

Light Weight Process라고도 부릅니다. 프로세스의 경우에는 프로세스 간에 데이터 접근이 불가능했지만, 스레드의 경우 하나의 프로세스에 여러 개의 스레드를 생성할 수 있고 스레드들은 동시에 실행 가능합니다. 또한 프로세스 안에 있기 때문에 프로세스의 데이터에 모두 접근 가능합니다. IPC 기법이 필요하지 않습니다. 스레드는 stack 영역에 생성되면서 각 스레드 별로 stack pointer와 pc를 갖게됩니다. stack 영역만 스레드 별로 구분되고 heap과 data, code 영역은 같습니다. 그렇기 때문에 IPC 기법 없이도 데이터 공유가 가능합니다. 보통 소프트웨어 병행 처리를 위해서는 multi thread를 사용합니다. 멀티 태스킹은 하나의 cpu에 여러 프로세스를 실행하는 것이..

운영체제 (OS) 2021.04.21