🏋️♂️ 운영체제는 무엇일까?
운영체제를 알아보기 전에 일단 컴퓨터와 정보에 대해 알아보자!
컴퓨터란?
정보란?
- 불확실한 상황을 측정해서 수치적으로 표현한 것
정보를 어떻게 처리할까?
정보의 최소 단위는?
- bit(binary digit)
- 정보가 8bit라면 표현할 수 있는 정보의 양은 2^8 bit(1byte)
(참고로 2^1024 = 1Mb)
정보의 처리
- 정보의 상태 변환: 0 -> 1, 1 -> 0
- 부울 대수로 모든 연산이 가능하다.(NOT, AND, OR)
- 이에, 논리 게이트를 만들 필요가 있다(NOT, AND, OR, XOR, NAND, NOR)
👉 이를 통해 논리 회로를 만드는 것이 가능해진다.
- 정보의 저장과 전송: 플립-플롭, 데이터 버스, Radio Frequency(RF)
컴퓨터가 정보를 어떻게 처리할까?
- 덧셈: 반가산기, 전가산기
- 뺄셈: 2의 보수 표현법
- 곱셈과 나눗셈: 덧셈과 뺄셈의 반복
- 실수: 부동 소수점 표현법
- 함수: GOTO(내가 원하는 곳으로 점프 혹은 되돌아 오기)
컴퓨터는 만능인가?
-
범용성(universality): 소프트웨어에 따라 하드웨어의 목적이 달라질 수 있다.
👉 NOT, AND, OR 게이트만으로 모든 계산을 할 수 있다.
👉 NAND 게이트만으로 모든 계산을 할 수 있다.
👉 범용 컴퓨터: general-purpose computer
-
계산 가능성(computability): 컴퓨터는 튜링 머신으로 계산 가능한 것을 계산한다.
👉 Turing-computable: 튜링 머신으로 계산 가능한 것
👉 정지 문제(Halting problem): 튜링 머신으로 풀 수 없는 문제
프로그램이란?
- 프로그램은 컴퓨터에 어떤 작업을 수행하게 만드는 명령어들의 집합이다.
그렇다면 운영체제는 무엇인가?
운영체제는 컴퓨터 시스템을 운영하는 체제이며 이를 소프트웨어적으로 구현한다.
운영체제도 프로그램인가?
- 운영체제도 프로그램인데, 컴퓨터에서 항상 실행중인 프로그램이다.
- 운영체제는 시스템 서비스를 어플리케이션 프로그램에 제공한다.
- 운영체제는 프로세스, 리소스(파일, input, output), 유저 인터페이스(마우스, 키보드) 등을 관리한다.
🥊 운영체제의 개념과 구조
운영체제의 정의
컴퓨터에서 항상 운영되고 있는 프로그램 하나를 의미한다.
👉 보통 '커널(kernel)'이라 한다.
Bootstrap program
- 컴퓨터를 키는 것을 부팅한다고 하는데, 이는 사실 bootstraping(부츠의 끈을 묶는 것) 하는 것이다.
👉 컴퓨터 전원을 키면 cpu가 ROM에 저장해 놓은 명령어를 불러오는데 이를 bootstrap 프로그램을 실행시킨다고 한다.
- 운영체제를 메모리에 로딩하는 역할을 한다.(메모리는 휘발성이기 때문에 부팅시 매번 로딩해 주어야 한다.)
Interrupts
- 예를 들어, 키보드가 'a'라는 문자를 눌렀을 때 키보드에 있는 컨트롤러가 이를 cpu에 알리게 되는데 이를 'interrupt' 방법으로 알려주게 된다.
- CPU와 I/O device가 통신하는 방법 중 하나이다.
- 'bus'를 통해 언제든 interrupt를 trigger할 수 있다.
👉 즉, bus를 통해 CPU에 시그널을 보내는 것이다.
폰 노이먼 architecture
- instruction-execution cycle을 말한다.
👉 컴퓨터에 내릴 수 있는 명령을 instruction-set이라 정의하고 이 명령어 집합에 있는 명령어들로 구성된 컴퓨터 프로그램을 메모리에 로딩하면 메모리에 있는 명령어들을 CPU가 하나씩 fetch 하고 execute하는 싸이클을 폰 노이먼 architecture라 한다.
👉 메모리에서 instruction register(IR)를 가져와 명령어들을 집합으로 구성해 주게 되며, 그러면 명령이 decode 되고 execution이 일어나게 되는 것이다.
Storage system
- 메모리는 휘발성이다. 따라서 비휘발성 저장장치가 필요한데 이러한 storage system은 여러 계층으로 구성되어 있다.
👉 용량과 접근 속도에 따라 구성된다.
Storage-device hierarchy
1. register: 가장 빠른 것은 CPU 내의 register이다(CPU 내의 저장공간).
2. cache: RAM보다 빠르지만 훨씬 더 비싸서 용량을 크게 할 수 없다.
3. main memory(RAM)
4. SSD(solid-state disk): 메모리 형태의 하드디스크
5. hard disk(HDD): 자기장을 이용한 하드 디스크
6. Optical disk
7. Magnetic tapes: 백업 용도
I/O Structure
- OS code의 대부분은 I/O를 managing 하는 역할을 한다.
컴퓨터 시스템의 구조(Computer System Components)
아래의 네 가지로 이루어져 있다.
- hardware
- operating system
- application programs
- user
Computer System Components의 정의
- CPU
- Processor
- Core
- Multicore: CPU 하나에 코어가 여러개 있는 것(즉, 하나의 CPU에 CPU core0(registers + cache) & CPU core1(registers + cache) 의 구조로 이루어져 있는 것이다.)
👉 그 개수에 따라 듀얼/쿼드 코어 등이 되는 것이다.
- Multiprocessor: Multicore가 여러개 붙으면 multiprocessor가 된다.
Symmetric Multiprocessing(SMP)
- 과거에는 processor가 1개였지만 현재는 processor는 1개가 아니고 여러개이다.
Multiprogramming
- 여러개의 프로그램을 동시에 메모리에 올려놓고 실행하는 것
- 메모리에 여러 개의 프로세스가 동시에 올라가게 되어 CPU 사용 효율을 높이게 된다.
👉 즉, Multitasking(=multiprocessing)이 가능하게 된다.
👉 Multitasking은 multiprogramming의 확장으로 보면 되며 CPU가 일을 빠르게 바꾸어 가며 하는 것을 말한다.
- multiprogramming 된 process들을 cpu가 time-sharing하며 동시에 실행(concurrent) 하는 것을 multitasking이라 한다.
👉 CPU Scheduling: multitasking 중 여러개의 프로세스가 동시에 돌 수 있을 때 cpu 효율을 가장 좋게 만드는 선택 방법이 무엇인 지를 결정하는 것을 말한다.
Operation의 두 가지 모드
- user mode와 kernel mode가 있다.
👉 다른 프로그램에 방해가 되는 일을 할 수 없도록 막는 일 역시 os가 한다.
- kernel mode가 아니면 직접적으로 hardware를 제어할 수 없다.
🕹 Virtualization
Virtualization(가상화)는 단일 컴퓨터의 하드웨어를 여러 다른 실행 환경으로 추상화할 수 있는 기술
VMM(Virtual Machine Manager)
- VMM을 이용하면 하나의 하드웨어 안에서 여러 개의 os를 실행할 수 있다.
👉 예를 들면 VMware, XEN, WSL 등이 있다.
Computing Environments
- 과거에는 Client-Server computing을 주로 했다.
👉 웹 서버(서버)와 웹 브라우저(클라이언트)의 request-reponse 관계이다.
- 단일 컴퓨터의 하드웨어를 여러 다른 실행 환경으로 추상화할 수 있는 기술
- 현재는 mobile computing(Android, iPhone)
- Peer-to-peer computing(P2P)
👉 대표적으로 음악 또는 영화 파일 공유가 있다.
👉 파일 공유하는 데 서버가 필요 없고 파일 조각들을 여러개로 나누어 p2p 네트워크가 파일 조각들을 갖고 있게 된다.
👉 여기서 더 확장된 것이 원장을 부여한 'bitcoin'이다.
- Cloud computing(AWS, Azure, GCP)
🏏 Operating System services
- OS는 컴퓨터 프로그램이 실행될 수 있는 환경을 제공해 준다.
👉 이 중 가장 중요한 것이 'process' & 'thread'이다.
OS와 사용자가 상호작용할 수 있는 방법
- CLI: 명령어를 이용함
- GUI: 그래픽 유저 인터페이스
- Touch-screen interface(최근의 스마트폰)
OS와 컴퓨터 응용 프로그램이 상호작용할 수 있는 방법
System call을 이용한다.
- OS가 제공하는 서비스를 'system call'로 호출한다.
- system call을 호출하는 것을 API(Application Programming Interface)라고 부르기도 한다.
👉 현재는 API가 보편화 되어 os 뿐 아니라 어떤 라이브러리도 다 API라 볼 수 있다.
👉 따라서, 'os의 API'가 system call이라 보면 된다.