전체 글

전체 글

    운영 체제 (Operating System) - Task Scheduler에서 Priority 조정을 위한 System Call 구현

    1. Task structure 프로그램을 실행하면 프로세스와 스레드가 생성되면서 일련의 실행흐름이 탄생하게 된다. 리눅스 커널의 관점에서 이 실행 흐름을 보았을 때, 프로세스와 스레드는 task로 관리되는데, 이렇게 표현된 task를 스케줄러가 적절히 자원을 분배하고 실행시켜 프로세스가 진행된다. 여기서 task와 관련된 모든 정보를 ‘문맥’이라고 표현하는데 여기에는 시스템 문맥, 메모리 문맥, 하드웨어 문맥이 포함된다. 시스템 문맥이란 task의 정보를 유지하기 위해 커널이 할당한 자료구조 들로 task_struct이 여기에 포함된다. 이 자료구조에는 task의 상태, 관계, 메모리, ID등 다양한 정보를 포함한다. 이 정보들을 용도에 따라 그룹화하면 다음과 같이 표현된다. 1. ID : pid, t..

    운영 체제 (Operating System) - CPU Scheduling

    1. 스캐줄링의 개념 어떻게 Process에 자원을 할당할 것인지에 대한 정책으로, Multiprogramming에서 기반했다고 한다. 잠시 2강에서 배웠던 Multiprogramming의 개념에 대해서 다시 살펴보고 가자. Multitasking으로 발전 전에 I/O로 인한 CPU Idle 상태 시간을 줄이고자 등장한 방식으로, 실행중인 프로세스가 I/O상태가 된다면, 다른 Job을 동시에 실행하는 방식이었다. (CPU와 I/O를 동시에 실행할 수 있는 것은 5강에서 배운 DMA라는 추가 HW덕분으로 추정된다) 이때 Job의 queue에서 어떤 Job을 실행해야 할 지 선택할 기준이 필요하다. 어떻게 CPU사용률과 처리량의 극대화하여 프로세스에게 CPU사용을 할당해야 하는가?를 담당하는 것이 스케줄링이..

    운영 체제 (Operating System) - Kernel System Call 이해와 구현

    1. Trpa, System call, Exception? 우선 System call의 정의와 역할에 대해서 알아보자. System call이란 OS Kernel이 제공하는 어플리케이션으로, 간접적으로 추상화된 하드웨어 접근을 이용하여 의도한 기능을 얻음과 동시에 OS 및 하드웨어를 많은 위험으로 부터 보호하는 기능을 한다. system call을 사용하는 이유는 모든 process가 하드웨어 및 OS 자원은 공유되는데, 이를 직접적으로 접근하면 간섭 및 오류가 날 가능성이 있기 때문이다. 그렇기 때문에 user mode의 OS 및 하드웨어의 직접적인 접근을 막고, system call을 통해 모든 기능이 활성화된 kernel mode로 이러한 기능을 수행하도록 하는 것이다. system call을 호출..

    운영 체제 (Operating System) - Computer Architecture

    1. Computer Architecture 지금까지 컴퓨터의 발달, OS의 구조, 프로세스에 대해서 알아보았다. 이제 프로세스의 실행이 실제 컴퓨터 구조에서 어떻게 실행되는지 조금 더 깊게 들어가보자. 프로세스의 실행 과정에서 HW간의 데이터가 교환된다. 이때 이 교환되는 통로를 Bus라고 한다. 여기서 이 Bus의 구성에 따라서 전체 시스템의 throughput이 달라진다. 예를 들어 모든 시스템이 하나의 Bus로만 데이터가 주고받아진다고 생각해보자 그렇다면 I/O 속도가 CPU의 처리속도를 따라가지 못하여 전체 시스템의 throughput이 낮아질 것이다. 이러한 구조를 단일 Bus 구조라고 하고, 같은 버스에 연결된 디바이스들 사이의 속도차로 인해 발생하는 throughput의 저하를 Bottle..

    운영 체제 (Operating System) - Process

    1. Process의 생성 지금까지 OS의 필요성과 기본적인 구조를 배웠다. 이제 조금 더 자세히 OS가 어떻게 작동하는 지 살펴보자. 이번에는 OS에서 가장 중요한 Abstraction인 Process에 대해 배워보자. 일련의 작업을 하는 프로세스를 만들기 위해서는 프로그램이 사전에 존재해야 한다. 이 프로그램은 소스코드로 부터 컴파일러와 링커를 통해 만들어지고, 이렇게 만들어진 프로그램이 Loader에 의해 프로세스가 되어 메모리에 올라가고, 실행된다. 이 변환 과정의 특징을 간단하게 알아보자. -1. Compliler [Source code --(Assembler)--(Compiler)--> Object file] Object file? : 기계어로 구성된 파일, 실행은 불가능 하지만 프로세스로 변..

    운영 체제 (Operating System) - 운영체제 구조 (2)

    1. OS설계 이전 시간에는 기존의 운영체제에 어떠한 문제점이 있었고, 그 문제점을 해결하기 위해서 운영체제의 구조가 어떻게 발전해왔는지 알아봤다. 이번 시간에는 그 운영체제의 구조가 어떠한 원칙을 바탕으로 구현되는지 알아보자. 운영체제 설계는 두가지 관점에서 볼 수 있다. Policy-(무엇)이 되게할 것인지? / Mechanism-무엇을 (어떻게) 할 것인지이렇게 2가지 관점으로 분리하면서 운영체제 설계를 모듈화할 수 있다. 그렇다면 이제부터 OS 설계 방식에 대해서 알아보자. 2. Layering 레이어링은 운영체제의 구조를 가상의 레이어로 나눔으로써 운영체제 설계의 복잡도를 낮추는 방식이다. 각 레이어는 잘 정의된 함수들로 이루어 졌는데, 하나의 레이어는 인접한 레이어와만 통신하도록 제한함으로써 ..