동기식 입출력 & 비동기식 입출력 입출력 처리를 운영체제를 통해서 해야 한다. 입출력을 요청한 프로세스가 기다려야 한다면 → 동기식 입출력이다. 입출력이 진행되는 동안에 그 프로세스가 곧바로 CPU를 점유하여 실행한다면 → 비동기식 입출력이다. 동기식 입출력 I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감 방법 1 : I/O 가 끝날 때 까지 CPU를 낭비시킨다. → 매 시점에 하나의 I/O 만 일어날 수 있음 방법 2 : I/O가 완료될 때까지 해당 프로그램에게서 CPU 를 빼앗음 → 다른 프로그램에게 CPU 를 준다. 대부분 방법2로 구현된다. 비동기식 입출력 I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감. 동기식 & 비동..
Computer Science
Process Synchronization 컴퓨터 시스템 내에서 데이터가 접근되는 패턴이 있다. 위의 그림처럼 데이터가 저장되는 공간에서 연산할 데이터만 로드시켜서 CPU에서 연산을 한다. 연산 결과는 다시 저장공간에 저장된다. 공유 데이터의 동시 접근이 일어나면 데이터의 불일치 문제가 발생할 수 있다. 일관성 유지를 위해서 협력 프로세스 간의 실행 순서를 정해주는 매커니즘이 필요 Race Condition 여러 프로세스들이 동시에 공유 데이터를 접근하는 상황 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라짐 race condition을 막기 위해서 concurrent process는 동기화 되어야 한다. Race Condition 이 발생하는 상황 1. Kernel Code ..
CPU Scheduling 이 필요한 이유 ? 여러 종류의 job (= process) 가 섞여 있기 때문에 스케줄링이 필요하다. CPU를 계속해서 사용하는 CPU bound job도 있고, 사용자와 인터렉션을 해야하는 I/O bound job 이 있다. FCFS (First-Come-First-Served) 프로세스의 도착 순서대로 사용한다. -> 마지막으로 도착한 프로세스가 지나치게 오래 기다리게 될 것이다. Round Robin 각 프로세스는 동일한 크기의 시간을 할당 받고, 할당받은 시간이 지나면 프로세스는 선덤 당하고 ready queue의 가장 뒤에 가서 줄을 선다. 프로세스가 ready queue에 n 개 있을 때, 할당 시간이 q time-unit인 경우, 각 프로세스는 최대 q time-..
Process 프로세스는 실행중인 프로그램이다 프로세스의 Context 프로세스에서는 문맥이 중요하다. CPU 수행 상태를 나타낸다. 하드웨어 문맥 : register가 현재 어떤 값을 가지고 있었는지, Program Counter 값 프로세스의 주소 공간 : code, data, stack에 어떤 내용이 들어있는지 프로세스 관련 커널 자료 구조 : PCB (Process Control Block), Kernel stack 이러한 프로세스 정보를 가지고 있으면 프로세스가 어떤 상태에 있는지 알 수 있다. 컴퓨터 시스템에서는 multi-tasking이 이루어진다. 즉 , 프로세스들이 번갈아 가면서 실행된다. 따라서, 현재 프로세스의 문맥을 알지 못하면 다음번에 CPU 자원을 사용할 때 실행할 수 없을 것이..
동기식 입출력 (Synchronous I/O) sync -> 시간적으로 서로 맞춘다 !! 립싱크할때의 그 싱크를 생각해보면 쉽다. I/O 요청 후 입출력 작업이 모두 완료 된 후에 CPU 제어가 사용자 프로그램에 넘어간다. 구현 방법 1 I/O 끝날때까지 CPU를 낭비시킨다. -> 한번에 하나의 I/O만 일어난다. 구현방법 2 -> 보통 동기식 입출력을 구현하는 방식 I/O 가 완료될 때까지 해당 프로그램에게서 CPU빼앗고 I/O 처리를 기다리는 줄에 그 프로그램이 대기한다. 다른 프로그램에게 CPU를 준다. ex) 정말로 스토리지에 결과값이 잘 write되었는지 확인해야만 다음 작업을 할 수 있는 경우 동기식으로 수행해야 할 것이다. 비동기식 입출력 (Asynchronous I/O) I/O가 시작된 후..
컴퓨터 시스템 구조 컴퓨터 시스템 구조는 크게 CPU, 메모리, I/O Device, Disk로 구성되어 있다. Memory : CPU의 작업공간 CPU에서 하는 일을 실행하는 공간이다. CPU : 매 clock cycle마다 기계어를 하나씩 읽어서 실행하게 된다. I/O Device : keyboard, 마우스, 모니터 등의 Input / Output 기계 장치 Disk : 보조 기억 장치이면서도 I/O 장치라고도 볼 수 있다. 메모리를 읽어들이는 Input Device이면서 처리 결과를 저장하는 Output Device이기 때문이다. Device Controller : 각각의 I/O 장치에는 Device Controller가 붙어있다. 이 Device Controller가 각각의 I/O장치를 관리한..
Intro 프로그램을 실행시킬 때 메모리에 로드되어 프로그램이 실행되는 과정에서 OS는 메모리(RAM) 에 공간을 할당해준다. 그렇지만 RAM 은 제한된 양을 가지고 있어서 이 제한된 스토리지를 어떻게 하면 효율적으로 사용할 수 있을지를 결정해야 할 것이다. 따라서 개발자 (사용자) 입장에서는 memory 구조를 알면 프로그램에 의해 사용되는 메모리의 양을 결정할 때 유용할 것이다. 각각의 영역은 개별적인 read-write 권한을 가진다. 코드(텍스트) 영역 개발자가 작성한 소스코드가 들어가는 부분이다. 텍스트 영역이라고도 부른다. 프로그램이 컴파일 된 후에, 바이너리 파일이 생성되고 이 바이너리 파일이 RAM에 로드된다. 바이너리 파일에 포함되어 있는 명령어들이 (함수, 제어문, 상수 등) 코드 영역..
Process 프로세스는 연속적으로 실행되고 있는 상태의 프로그램을 뜻한다. 메모리위에 올라와서 연산들이 처리되고 있는 프로그램의 인스턴스이다. 인스턴스라는 것은 프로그램 실행에 필요한 내용이 메모리에 적재된다는 의미이다. 프로세스는 실행될 때 운영체제로부터 Virtual Memory 를 정해진 크기만큼 할당받게 된다. 또 달리 생각하면 프로세스 단위로 Virtual Memory 를 할당해준다고 이해할 수 있다. Virtual Memory 란 비싸고 빠르고 작은 RAM 과 크고 저렴하고 느린 HardDisk 를 병합해서 하나의 기억장치처럼 쓰겠다는 것이다. 이 가상메모리를 구현하는 역할을 하는 특수 메모리 관리 하드웨어가 MMU(Memory Management Unit)이다. Thread 스레드가 프로세..