운영체제

    CPU Scheduling

    프로세스의 CPU 동작 cpu가 메모리에서 명령어를 가져와서 동작을하게 되는데 CPU에서 동작하는 load, store, read등과 같은 명령어들이 있고, 외부 하드웨어 장치에 접근하여 수행하는 작업들이 있다. 각각을 CPU bursts: CPU를 사용하여 실행되는 작업 I/O bursts: I/O장치와의 상호작용하여 발생하는 작업 CPU 스케줄링이 필요한 이유 위와 같이 CPU에서 CPU만 사용하는 작업만 있는 것이 아닌 I/O 작업도 있기 때문에 이를 적절하게 분포해야한다. 또한 사람과의 소통에서 중요한 것은 I/O 작업인데, 이러한 작업을 더 자주 줘야 소통이 원활하기 때문이다. I/O bound process CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job CPU bound ..

    운영체제 - 프로세스 생성

    프로세스 생성 부모 프로세스가 자식 프로세스를 생성한다. 하나의 부모 프로세스가 여러 자식 프로세스를 생성하므로 트리와 같은 구조로 형성 프로세스를 사용하기 위해서는 메모리와 같은 자원이 필요하다. 부모와 공유하는 프로세스 운영체제로 부터 할당 받는 프로세스 Execution에도 2가지로 분류 된다. 부모와 자식은 공존하며 수행 자식이 종료될 때까지 부모가 기다리는 모델 생성 순서 자식은 부모의 공간을 복사한다. fork() 시스템 콜을 통해 새로운 프로세스를 생성 부모를 복사 후 주소 공간 할당 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올린다. 종료 순서 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다 (exit 시스템 콜) 자식이 부모에게 output data를 보낸다...

    운영체제 - Thread

    Thread 프로세스내에서 실행되는 흐름의 단위, CPU를 수행하는 단위 왜 Thread 가 필요할까? 만약 동일한 일을 하는 프로세스가 여러 개가 있다하면 프로그램은 비효율적이다. 여러 개의 프로세스 공간과 PCB가 있을 것이고 프로세스가 변경될 때마다 엄청난 cost가 발생하기에 비효율적이다. 따라서 하나의 주소 공간안에 프로세스마다 서로 다른 PC값을 가르키게 하여 효율적이게 만든 것이 Thread 스레드의 특징 하나의 프로세스는 code, data, stack이 존재한다. 운영체제의 data영역에는 PCB가 존재한다. 그렇다면 하나의 공간에 여러 Thread 즉 여러 행동을 하려면 어떤 공간이 나눠져있어야 할까? Stack 공간: 각 Thread마다 실행하는 함수가 다르므로 PCB의 PC & Re..

    운영체제 - 프로세스

    프로세스란? 실행 중인 프로그램이다. 메모리와 관련된 프로세스 프로그램을 실행하게 되면 메모리에 프로세스만의 주소 공간이 생기게 된다. code, data, stack가 생긴다. CPU의 수행 상태 나타내는 하드웨어 Context 메모리에 프로세스가 올라오게되면 자신의 code가 돌아가게 된다, 이때 현재 자신의 코드가 돌아가는 위치(명령어)를 알아야하기 때문에 PC(Program counter)와 각종 Register를 통해 현재의 위치를 알 수 있다. 커널에서의 프로세스 운영체제가 프로세스를 관리하게된다. 여러 프로세스가 번갈아가며 돌아가게 된다면 변경하기 전에 이전 정보를 저장해야한다. 따라서 커널은 프로세스 관련하여 자료구조를 가지고 있어야 한다. 이를 PCB(Process Control Bloc..

    운영체제 - I/O 구조

    CPU - memory - device 간 관계 구조에 대한 것입니다. I/O 구조 운영체제 코드의 대부분을 성능에 대한 중요성과 장치의 다양한 특성 때문에 I/O를 관리하는데 사용된다. 지금까지 인터럽트의 경우 장치가 CPU에게 보내게 되는 것이었는데 이러한 인터럽트는 소량의 데이터 이동에는 좋았습니다. 하지만 NVS(기계적 저장 장치) I/O같은 대량의 데이터가 이동해야 하는 경우 높은 overhead가 발생시킬 수 있다. 이를 위해 DMA(Direct memory Access)가 존재한다. DMA I/O에 대한 인터럽트를 대신 받아 처리해준다 까지만 설명했었지만 자세히 들어보면 이러한 대량의 데이터가 이동해야할 경우 더 좋은 효율로 처리합니다. 일부 high-end 시스템의 경우 bus대신 swit..

    운영체제 - 저장소

    Memory CPU는 명령어를 오직 메모리에서만 가져올 수 있다. 따라서 프로그램은 실행하기 위해 메모리에서 처음으로 가져온다. RAM : Random access memory ( main memory ) 일반적으로 프로그램은 다시 쓸 수있는 메모리에 올려 실행한다. 메인 메모리는 일반적으로 DRAM(Dynamic Random-Access memory)라 불리는 반도체 기술에 구현된다. Bootstrap program : 컴퓨터에 전원이 들어오면 bootstrap program이 실행되며, 운영체제 위에 올라간다. RAM은 휘발성이기 때문에 전원이 꺼지거나 다른 방법으로 데이터가 손실 가능 때문에 bootstrap program을 유지할 수가 없다. 이를 해결하기 위해 전기적 소거 및 프로그램이 가능한 ..

    운영체제 - 인터럽트

    이전 포스트 운영체제 구조에서 대략적인 구조를 봤습니다. 이번 포스트는 인터럽트에 대해 조금 더 보겠습니다. 인터럽트 하드웨어는 인터럽트를 CPU에게 계속 보내고 트리거를 시킨다. 이때 보내는 통로는 System bus이다. System bus = 주요 컴포넌트들과 소통하는 메인 통로이다. 인터럽트는 많은 목적으로 사용하며 운영체제와 하드웨어와의 상호작용 중요 부분이다. CPU는 인터럽트를 받으면 하던 일을 즉시 멈추고 실행을 fixed location에 전송한다. fixed location : interrupt service routine이 위치한 시작 주소 Interrupt service rountine이 실행되고 끝이나면, CPU는 중단된 계산을 다시 시작한다. 물론 인터럽트들은 컴퓨터 아키텍쳐에 ..

    운영체제 구조

    System 구조 및 실행 절차 CPU와 다른 I/O device들 간에는 bus를 통해 데이터를 주고받습니다. 이번에는 전반적인 system 구조와 실행 절차를 정리했습니다. 1. 기본적인 구조 Memory는 CPU의 작업 공간, 프로그램이 올라가는 공간 CPU는 클럭을 기준으로 계속 매 클럭마다 명령어를 가져온다. 2. CPU 동작 A라는 사용자 응용프로그램을 실행하고 있다 생각해보자. CPU의 처리속도와 I/O device의 처리속도는 많은 차이가 있다. (CPU가 효율적으로 일하기 위해서는 Memory랑만 서로 소통하면 된다.) CPU의 제어권은 A에게 있는 상태에서 키보드와 같은 외부 I/O devices 장치들을 이용하고 싶은 상태이다. (물론 사용자 응용프로그램은 외부 장치에 접근을 못하지만..