Search
Duplicate
👩🏻‍💻

[운영체제] 운영체제 개념과 구조

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
운영체제
개발지식
Scrap
태그
개발지식
9 more properties
chapter1-2. ( 크게 중요한 내용은 없는 부분. 3-10장이 중요!)
Introduction & O/S Structures
운영체제?
컴퓨터 하드웨어를 관리하는 소프트웨어.
유저와 하드웨어 간의 중간다리 역할을 한다.
컴퓨터 시스템엔 크게 4가지의 컴포넌트가 있다고 생각할 수 있다.
하드웨어
OS
애플리케이션 프로그램들
사용자
유저는 OS에 요청만 하면 서비스를 제공 받을 수 있다.
사실 운영체제의 정의는 매우 많다. 단 한가지로 정의 할 수가 없기 때문.
주로 흔하게 많이 하는 정의는 그저 “the one program running at all times on the computer”일 뿐.
이 흔한 정의대로, 운영체제를 항상 작동되고 있는 한 프로그램이라고 본다면,
운영체제의 가장 중요한 부분은 바로 “커널”이다.
커널에서 시스템 프로그램과 애플리케이션 프로그램들에 대한 “인터페이스”를 제공해 준다.
전통적인 컴퓨터 시스템의 구조
1개 혹은 그 이상의 CPU 와
많은 디바이스 컨드롤러(버스로 연결되어 있음)로 구성되어 있다.
⇒ 그림 설명 : CPU는 여러 종류의 Bus(그림의 검은 실선)를 통해서 memory(RAM)와 연결되어 있고, disk controller, USB controller 등등의 각각의 디바이스 컨트롤러를 통해 디스크, 마우스, 키보드 등과 연결되어있다.
Bootstrap 프로그램
⇒ 컴퓨터를 부트한다 ⇒ 부트스트랩을 한다.
컴퓨터의 전원을 키게 되면, cpu가 메모리에서 정보를 받아와 프로그램들을 실행하게 되는데, 그중 EEP(E2P) ROM같은 곳에 저장된 명령어를 불러오는 과정을 Bootstrap이라고 부르는 부팅용 프로그램이다.
가장 먼저 시작되는 작업이므로,
하드디스크(HDD)에 있는 운영체제(특히 커널)을 메모리에 로딩하는 일을 한다!
Interrupts
⇒ 키보드에 있는 ‘a’키를 눌렀을 때, 이를 cpu에 알려주는 일 ⇒ interrupt를 통해 알려준다.
하드웨어가 interrupt를 언제라도 트리거 시킬수 있다.
interrupt가 트리거 되면, CPU에 system bus를 통해 신호를 보내고 어떤 키 입력이 일어났는지를 알려준다.(→CPU는 해당 키 입력에 맞는 처리를 하게 된다.)
폰 노이만 아키텍처
instruction-execution cycle을 폰 노이만 아키텍처 라고 한다.
⇒ 컴퓨터에 내릴 수 있는 명령어들을 instruction set(명령어 집합)으로 정의를 해 두고, 이를(이 것도 컴퓨터 프로그램이다) 메모리에 로딩 하면, 메모리에 있는 명령어들을 cpu가 하나씩 fetch하고, 이를 실행(execute)하는 사이클.
이를 위해선 명령어를 저장하는 레지스터(instruction register)가 필요하다.
storage system(비 휘발성 저장장치 시스템)
여러개의 계층구조가 있다.
이 계층 구조는
용량(storage capacity)
속도(access time)
에 따라 나뉜다.
제일 빠른건 cpu내에 위치한 레지스터(register)이다. RAM도 빠른 메모리이지만, 이것보다도 빠른게 cache 메모리(ram보다 비쌈)이다. ram이 메인 메모리. ssd⇒ 메모리 형태의 하드디스크. HDD보다도 저장하기에 양이 많은 정보는 광학디스크에 저장하고, 10년 정도 쌓인 정보라 하면 마그네틱 테이프에 저장하는게 적합하다.
I/O structure
어떤 CPU가 thread of execution를 가지고 있을 때, 캐시메모리를 통해서 RAM(오른쪽 memory라고 쓰여있는 공간)에 access를 하고, IO device(하단 파란 별)가 interrupt를 걸어 CPU와 정보를 주고 받는 I/O structure를 가지고 있다.
DMA(Direct Memory Access) ⇒ cpu가 관여할 일이 별로 없을 때 직접 정보를 주고 받는 interrupt 구조(ex> 유튜브 동영상 재생 등)
OS kernel은 상당히 안정적. 대부분의 OS 업데이트는 kernel 보다는 디바이스 컨트롤러에 대한 업데이트 들이다.
컴퓨터 시스템의 구성 요소들
CPU - 명령들을 실행하는 하드웨어
processor - 1개 이상의 CPU들을 포함한 물리적 칩
core - the back computation unit of the CPU
multicore - including multiple computing cores on the same CPU
multiprocessor - including multiple processors
SMP 구조
아주 초소형의 임베디드 시스템이 아닌 이상, 과거의 cpu하나에 memory 하나인 구조는 사용하지 않는다.
대부분 symmetric multiprocessing(SMP) 구조
asymmetric multiprocessing 구조도 있긴한데, 거의 안씀.
SMP 구조는, 메모리는 한개인데 이에 연결된 CPU가 여러개. cpu에는 각각의 레지스터와 캐시가 있다.
그런데, cpu 자체를 많이 다는것은 비용이 많이 든다.
그래서 일반적인 PC에서는 cpu는 하나 이지만, 하나의 cpu안에 cpu core를 여러개를 넣어서 만든다.
(요새는 쿼드코어를 넘어 옥타코어도 많다.)
이렇게 내부에 core가 여러개 있는 cpu를 여러개 연결한 컴퓨터는 멀티 프로세서라고 한다.
Multiprogramming(중요!)
과거에는 메모리에 프로그램을 1개만 로딩해서 그 일이 끝나면 다른것을 로딩하는 식으로 동작했다. 현재는 여러개의 프로그램을 메모리에 로딩해두고 동시에 실행을 한다. 이를 멀티 프로그래밍이라고 한다.
멀티프로그래밍 : 1개 이상의 프로그램들이 동시에 동작하는것(run)
메모리에 여러개의 프로세스 동시에 메모리에 올라가 있으면, cpu 사용효율성을 높일 수 있다.
⇒ multiprogramming이 가능해 지면서, multitasking이 가능해 졌다.
Multitasking(=Multiprocessing)
멀티 프로그래밍이 가능해지면, 하나의 cpu가 노는 시간이 줄어든다. 시간을 쪼개쓰는것 ( 시분할, time sharing)이 가능해 짐. ⇒ concurrency
이렇게 멀티 태스킹을 하기 위해서는 CPU scheduling을 해야한다. → 남아있는 task 중에 어떤것을 먼저 할지를 결정 ⇒ cpu 효율을 높이기 위한 선택방법이 필요.
operation mode
user mode 와 kernel mode가 존재.
user가 system call(운영체제에 요청)을 하게 되면, kernel mode로 전환됨. 커널 모드에서 시스템 콜을 처리한 후 다시 user mode로 전환이 된다. kernel 모드가 아니면 직접적으로 하드웨어를 제어하지 못하게 함으로서, 악영향을 끼치기 어려워지게 하는 것.
Virtualization(가상화)
어떤 싱글 컴퓨터가 있을 때, 여러개의 프로세스를 돌릴 수 있다. 하나의 하드웨어 자원을 가지고 여러개의 운영체제를 돌리는 것도 가능하다. VMM을 사용하면 가능(Virtual Machine Manager)
하드웨어에 OS를 바로 올리지 않고, VMM을 올리고 그 위에 OS를 여러개 올릴 수 있게 되는 것임(여러개의 OS를 VMM scheduling을 함)
computing environment는 수도 없이 복잡해져왔고 더 복잡해질 예정.
Modile Computing
Client-Server Computing ( ex> 웹)
Peer-to-Peer Computing (ex> 음악 파일 공유(토렌트),)
서버 없이 파일 조각들을 여러 사람들이 가지고 공유
비트코인(→ 블록체인 기반 → 블록체인도 ptp 컴퓨팅 기반)
Cloud Computing ( ex> AWS, Azure, GCP 등등)
⇒edge computing 이라고 하기도 함.
안개 속에 이 모든 컴퓨팅 자원이 있고, 우리는 클라우드가 제공하는 서비스만 사용하면 되는 것임.
Real-Time Embedded Systems(ex> 화성 탐사 RTOS)
⇒ 최근 운영체제 관련 이슈는 이런 컴퓨팅 environments들을 어떻게 반영할 것인지 임.
운영체제는 다음과 같은 것을 제공해야 한다.
이 내용들은 앞으로 학습에서 차차 알아 갈 텐데, 가장 중요한 개념은 process이다. process보다 작은 개념이 thread인데, 이 프로세스와 쓰레드를 한개만 돌릴 때는 큰 문제가 없지만, multiprocessing 하기위해서 공부할 내용들이 있다. 멀티프로세싱을 하기 위해서 반드시 발생하는 문제가 바로 ‘동기화(synchronization)’문제 인데, 동기화 문제를 제대로 해결하지 못하면 deadlock 문제가 발생하게 된다. 이들을 처리하기 위해 메모리 메니지먼트를 어떻게 할지, 버추얼 메모리는 어떻게 관리할 것인지, 또 cpu 스케줄링을 어떻게 할지가 가장 핵심적인 학습 포인트 들이다.
운영체제가 제공해야하는 서비스들
이번 학습에서는 program execution을 중점으로 file systems은 조금 다루어 보는 정도로 진행할 예정.
시스템 콜?
명령어 기반 인터페이스 : CLI ( shell : sh, bash, csh, tcsh, zsh, etc.)
그래픽 기반 : GUI
터치기반
⇒ 사용자와 상호작용하기 위한 인터페이스
시스템 콜은 OS가 제공해주는 서비스들을 사용하기 위한 인터페이스를 제공.
이런 시스템 콜을 호출 하는 것을 API(Application Programming Interface)라고 한다.
⇒ 현재는 OS에 한정하지 않고 open API등의 라이브러리 개념으로도 많이 쓰이는 용어.
항상 이렇게 일일히 시스템 콜을 사용하기에는 번거롭기 때문에,
라이브러리를 제공하고, 제공된 라이브러리를 통해 손쉽게 원하는 기능을 사용 가능
이번 학습에서는 process control이 주된 내용이 될것이기 때문에 fork(), wait() 등의 시스템 콜을 주로 공부하게 될 것.