CS/운영체제

    [운영체제] Page table의 3가지 구조 - Hierarchical, Hashed, Inverted Page table

    목차 🐤 계층적 페이지 테이블 (Hierarchical page table) 🐦 해시 페이지 테이블 (Hashed page table) 🐧 역페이지 테이블 (Inverted page table) 페이징(Paging)이란? [운영체제] 비연속할당(Noncontiguous allocation) - 페이징(Paging) 목차 🤔 페이징(Paging)이란? 🙉 페이지 테이블(Page table)과 주소 변환 🙈 페이징의 문제점 내부 단편화(Internal fragmentation) 페이지 테이블의 크기 🤔 페이징(Paging)이란? 기존 Segmentation과 Contiguous al itstory1592.tistory.com 페이징(Paging)은 외부 단편화를 해결하고 메모리를 효율적으로 사용할 수 있는 ..

    [운영체제] 비연속할당(Noncontiguous allocation) - 페이징(Paging)

    목차 🤔 페이징(Paging)이란? 🙉 페이지 테이블(Page table)과 주소 변환 🙈 페이징의 문제점 내부 단편화(Internal fragmentation) 페이지 테이블의 크기 🤔 페이징(Paging)이란? 기존 Segmentation과 Contiguous allocation의 경우, 남은 메모리 총량이 충분해도 작은 Hole들을 활용하지 못하는 외부 단편화 문제가 있었습니다. 특히, First-fit의 경우 50% rule에 의해 메모리의 1/3이 낭비되는 문제가 발생하기도 하였습니다. 이러한 문제들의 공통적인 특징은 가변 분할이었습니다. 프로세스마다, 세그먼트마다 크기가 각기 다르다보니 메모리에는 각기 다른 Hole들이 발생하였고, 이러한 Hole들은 대부분 낭비된다는 문제였습니다. 그래서 등..

    [운영체제] 비연속할당(Noncontiguous allocation) - 세그먼테이션(Segmentation)

    목차 🤔 비연속할당(Noncontiguous allocation)이란? 🧩 세그먼테이션(Segmentation)이란? 🙉 세그먼트 테이블(Segment table) 🙊 세그먼테이션(Segmentation) 주소 변환 🙈 Segmentation의 문제점 🤔 비연속 할당(Noncontiguous allocation)이란? 기존에는 연속 할당(contiguous allocation) 기법을 사용하여 프로세스를 통째로 메모리에 적재하였습니다. 연속 할당 기법은 base address에 상대 주소인 logical address를 더해줌으로써 물리 주소를 간단하게 translation 할 수 있다는 장점이 있었습니다. 따라서 MMU를 단순화할 수 있었지만, 외부 단편화가 발생하여 메모리 공간을 효율적으로 사용하지 ..

    [운영체제] Contiguous Allocation의 문제점 - External Fragmentation(외부단편화)

    목차 💥 Contiguous allocation의 문제점 🤔 External Fragmentation이란? 👀 Compaction(압축)을 활용한 외부 단편화 해결 💥 Contiguous allocation의 문제점 이전 포스팅에서 Contiguous allocation은 프로세스를 메모리에 분할해서 적재하지 않고 한 번에 통째로 적재하는 방법론이라고 설명했습니다. Contiguous allocation은 CPU의 MMU(Memory Management Unit)가 논리 주소를 물리 주소로 translation 함에 있어 단순함을 제공해준다는 장점이 있었습니다. 그러나, 단지 단순함때문에 값비싼 HW자원 중 하나인 Memory를 낭비하는 문제가 발생했습니다. 🤔 External Fragmentation이..

    [운영체제] Address Binding - Compile, Load, Execution time binding

    목차 🤔 Address binding이란? 🧡 Compile time binding 💛 Load time binding 💚 Execution time binding 🤔 Address binding이란? 우리가 프로그램을 실행시키면 프로세스가 되어 Main Memory라고 불리는 RAM에 올라갑니다. 이때 메모리 주소는 우리가 프로그래밍을 할 때 사용하던 주소 그대로일 수도 있고, 그렇지 않을 수도 있습니다. 그 이유는 CPU가 만들어내는 가상의 주소인 Logical address(논리 주소)와 실제 메모리 상의 특정 번지를 나타내는 Physical address(물리 주소)를 어떻게 관련지을 것인지에 대한 다양한 방법이 있기 때문입니다. 즉, 프로세스를 메모리에 할당시킬 때, 물리 주소를 언제(When)..

    [운영체제] 식사하는 철학자들 문제 (Dining philosophers problem) - Deadlock, Starvation

    목차 🤔 식사하는 철학자들 문제(Dining philosophers problem)란? 💡 문제 해결 방법 🤔 식사하는 철학자들 문제(Dining philosophers problem)란? 식사하는 철학자들 문제(Dining philosopher problem)는 Deadlock과 Starvation을 비유하여 설명하는 좋은 예제입니다. 5명의 철학자가 원탁에 앉아서 식사를 합니다. 애처롭게도, 철학자 사이사이에 젓가락은 하나씩만 주어집니다. 그렇기 때문에 아래와 같은 과정을 통해 식사를 해야 합니다. 1. 철학자들은 일정 시간 동안 생각을 한다. 2. 왼쪽 젓가락이 사용 가능할 때까지 기다린다. 만약 사용 가능하다면 집어든다. 3. 오른쪽 젓가락이 사용 가능할 때까지 기다린다. 만약 사용 가능하다면 집..

    [운영체제] CPU 스케쥴러 (Short-Term, Long-Term, Midium-Term 스케쥴러)

    목차 🤔 CPU 스케쥴러(Scheduler)란? 🖥 스케쥴러의 종류 🕛 단기 스케쥴러 (Short-Term Scheduler) 🕑 장기 스케쥴러 (Long-Term Scheduler) 🕗 중기 스케쥴러 (Midium-Term Scheduler) ⭐ 최신 OS의 스케쥴러 🤔 CPU 스케쥴러(Scheduler)란? CPU는 한 번에 하나의 프로세스만 실행할 수 있습니다. 멀티 프로세서라는 개념이 도입되기도 하였지만, 우리가 실행하고자 하는 프로그램의 개수에 비하면 턱없이 부족한 숫자입니다. 그렇기 때문에 운영체제는 Time Sharing을 통해 하나의 CPU에 대해 여러 프로세스를 비동기적(Concurrent)으로 실행시킵니다. 또한, CPU를 어떻게 하면 가장 효율적으로 사용할 수 있을지 매 순간 고민합니..

    [운영체제] 좀비(Zombie) 프로세스와 고아(Orphan) 프로세스

    ✏️ 좀비(Zombie) 프로세스와 고아(Orphan) 프로세스 좀비(Zombie) 프로세스는 자식 프로세스가 부모 프로세스보다 먼저 종료된 프로세스를 의미합니다. 고아(Orphan) 프로세스는 부모 프로세스가 자식 프로세스보다 먼저 종료된 프로세스를 의미합니다. 💡 프로세스의 Creation & Termination 부모 프로세스는 fork() 시스템콜을 통해 새로운 자식 프로세스를 생성합니다. fork() 시스템콜을 통해 생성된 자식 프로세스는 부모 프로세스를 복제하기 때문에 부모와 동일한 형태를 가집니다. 그리고 이후에 exec() 시스템콜을 호출하면, 생성한 프로세스의 메모리 공간을 새로운 프로그램으로 대체할 수 있습니다. 이러한 프로세스들은 크게 2가지 방식으로 실행됩니다. Parent와 Chi..