실행중인 프로그램. 좀 더 자세히 보자면, 0과 1로 이루어진 파일(코드 이미지 혹은 바이너리)을 실행하면 데이터가 메모리에 올려지고, 이걸 CPU가 한줄씩 읽어가면서 실행하게 된다. 이때 메모리에 올려진 데이터를 바로 프로세스라고 한다. 어떤 응용 프로그램은 코드 이
여러 개의 프로세스 중 어느 시점에 어떤 프로세스를 실행할지에 대한 규칙, 즉 알고리즘. 그런 알고리즘들이 운영체제의 여러 기능 중 하나로 구현되어 있고, 이걸 우리는 프로세스 스케줄러라고 말한다. 사용자와 시스템 간 상호작용이 없이 수행되는 작업. 요청이 있을 때마다
CPU(중앙처리장치), 메모리(RAM), I/O (모니터, 마우스 등 입출력기기), 저장매체(SSD, HDD 등)각각의 응용프로그램들이 아니라 운영체제가 직접적으로 시스템 자원(컴퓨터 하드웨어)을 제어한다. 즉, CPU를 얼마나 사용할지, 각 응용 프로그램의 주소, 메
### 커널 kernel 커널은 컴퓨터와 하드웨어의 작동을 관리하는 운영체제의 핵심 구성 요소이다. 커널은 프로세스 간 통신과 시스템콜(system calls)을 통해, 응용 프로그램과 하드웨어 수준에서의 데이터 처리 간 중간다리 역할을 한다.
응용 프로그램을 사용하기 위해, 커널에 뭔가를 요청하고 다시 커널이 그 요청 결과를 쉘에게 건네준다. 사용자가 응용 프로그램을 사용하는 동안 이런 일들이 벌어지는 것이다. 이때 커널과 쉘 프로그램은 어떻게 의사소통을 할까? 커널은 쉘 프로그램이 요청할 수 있도록 특정
First In First Out 가장 단순한 스케줄링 알고리즘이다. 단순히 준비 대기열에 도착한 순서대로 프로세스를 대기열에 넣는 것을 말한다. 1\. ready queue를 생성해서 실행시킬 프로세스들을 ready queue에 넣는다. 2\. 해당 큐에서 프로세스를
각 프로세스에 위와 같은 상태 정보를 넣어서, 프로세스 상태를 기반으로 프로세스를 스케줄링한다. 이전에 배운 여러 가지 알고리즘들도 상태 정보를 갖는다. new(create) state : 생성될 예정이지만 아직 생성되지 않은 상태. 보조 메모리에 존재한다. ready
Registers는 CPU에 내장된 작은 저장 장치이다. 데이터를 임시로 저장하고 컴퓨터 성능을 높이는 데 도움이 된다. 레지스터의 크기는 컴퓨터 아키텍처에 따라 다를 수 있고, 다양한 유형의 레지스터가 각자의 역할을 수행한다. stack pointer와 program
프로그램이 실행 중일 때, 변수는 일반적으로 call stack 혹은 process heap에 저장된다. 함수 호출이 끝난 후에도 계속 남아 있는 메모리를 얻고 싶으면 process heap에서 찾아볼 수 있다. (여기서의 프로세스 힙은 data structure의 a
컨텍스트 스위칭은 CPU에 실행할 프로세스를 교체하는 기술이다. 프로세스 스케줄링에서 프로세스를 계속해서 바꿔주는 기술들에 사용되는 게 바로 컨텍스트 스위칭이다. 프로세스는 다음에 실행할 코드가 담겨 있는 PC와 호출된 함수와 변수들의 주소를 갖고 있는 SP를 통해
성능이 좋은 프로그램을 만들려면 병행 작업이 동반되어야 한다. 예를 들어 하나의 작업을 한명씩 한명씩 차례대로 수행하는 것보다는 하나의 작업을 여러 명이서 동시에 수행하는 게 더 효율적이다. 이때 여러 명이서 동시에 작업을 수행했다면 작업 결과를 한 데 모아 결과를 도
스레드(thread)는 프로세스 내 a path of execution이다. 스레드는 순차적인 프로그램과 유사하다. 단일 스레드에도 시작, 실행순서, 그리고 끝이 존재하며 스레드가 실행되는 동안에도 특정 시간에 단일 실행 지점이 존재한다. 하지만 스레드는 자체 프로그램
위 코드는 단일 스레드로 구성되어 parallelism를 걱정할 필요 없는 간단한 코드이다. 코드는 항상 4999950000를 반환한다. 위 코드는 두 개의 새로운 스레드 threadFunc, threadFunc2가 추가된 코드이다. 하지만 위 코드를 출력해보면 앞선
프로세서(processor)가 프로그램을 실행하기 위해서는 메인 메모리에 프로세스(process)가 적재되어야 한다. 폰노이만 구조에 따르면 모든 코드나 데이터는 메인 메모리에 적재되어야 하기 때문이다.하지만 컴퓨터에서 CPU에서 사용할 수 있 메모리가 32MB RAM
MMU가 페이지 테이블을 확인했을 때, invalid라면 page fault trap이 발생한다. 운영체제는 backing store에 가서 페이지가 있는지 확인한 후, 페이지가 backing store에 있다면 비어 있는 frame에 페이지를 올린다.이때 비어 있는
파일 시스템은 OS에서 필수적이다. 파일 시스템은 데이터와 정보를 저장장치에 저장해 쉽게 검색할 수 있도록 하는 데이터 구조이다. OS마다 파일 시스템을 다르게 사용할 수는 있지만, 기능은 비슷하다.
하나의 하드웨어(CPU, Memory 등)에 여러 개의 운영체제를 설치하고 개별 컴퓨터처럼 동작하도록 하는 프로그램 bare metal에 기반한 hypervisor(가상 머신의 리소스를 하드웨어에서 분리해서 제어하는 프로그램). 하드웨어와 다양한 운영체제 중간에 위치해
컴퓨터가 켜지면, // 1. CPU가 ROM에 저장되어 있는 BIOS를 실행한다(CPU가 ROM의 특정 주소에 있는 BIOS 코드를 메모리에 로드해서 실행). 주기억장치(메모리)는 2가지(ROM과 RAM)로 나뉘는데, ROM은 Read-Only-Memory로서 읽기만
컴퓨터는 다른 컴퓨터와 데이터를 주고 받을 수 있다. 즉, 통신을 할 수 있다. 통신에는 범위가 존재한다. LAN(Local Area Network) : 컴퓨터 간 근거리 통신이 가능하다. WAN(Wide Area Network) : 컴퓨터 간 광역으로 통신할 수 있다
OSI 모델은 참조/논리 모델이다. 컴퓨터 간 통신할 때 이런 구조를 가져야 한다는 표준일 뿐, 실제로는 보다 간결한 구조로 통신을 한다. TCP/IP 모델은 실제로 인터넷 통신을 위해 사용하는 네트워크 스택이다. OSI 모델은 보다 간소화된 형태이다. 인터넷은 TCP
TCP는 header와 body 부분으로 나뉠 수 있고, header 부분은 위 그림과 같은 Segment Structure를 갖는다. 10\. Transport Layer
폰노이만 구조는 현대 컴퓨터 시스템의 발판을 마련했다. 초기 컴퓨터는 reprogramming을 하기 위해 물리적으로 분해하고 재설계를 해야 했다. 폰노이만 구조 이후 data operations과 instrument fetch processes이 동시에 가능해졌다.
컴퓨터의 동작은 전기를 끄고 키는 것(0과 1)으로 설명된다. 0과 1로 의사소통을 할 수 있고 연산을 할 수 있다. 아래 그림은 진리표를 사용한 논리 게이트 표현. Basic Gates and Functions
Oscillator, Flip-Flop
이전 시간에 데이터를 저장할 수 있다는 걸 배웠다.그렇다면 이제 데이터를 어디에 저장할 것인가? 데이터의 위치 개념이 있어야, 그 위치에 데이터를 저장하거나 그 위치에서 데이터를 읽어올 수 있다. 그걸 컴퓨터에서는 주소(Address)라고 부른다. 우리가 특정 데이터를
Accumulator는 CPU에서 산술/논리 데이터를 잠깐 동안(단기적으로 혹은 중간에) 저장하기 위한 register이다. accumulator라는 용어 자체는 자주 사용되지 않으며 register라는 용어로 대체되었다. 최신 컴퓨터에서는 모든 레지스터가 Accumu