운영체제
유저, 애플리케이션, h/w간에 중간 매개역할
H/W, OS, 애플리케이션프로그램, and a user
컴퓨터 위에서 항상 실행되는 하나의 프로그램
Kernel로도 정의
하드웨어를 제어하는 소프트웨어
유저와 하드웨어 사이의 중계자
kernel
"OS는 항상 running 하고 있는 프로그램"
핵심은 kernel
kernel에서 system program과 application program에 대한 interface 제공한다.
mordern computer system
전통적인 컴퓨터 시스템 구조: CPU, 여러개의 디바이스 컨트롤러, common bus로 연결
1개 이상의 CPU로 구성되었고 버스(Bus)를 통해서 연결된 기기 제어기(Device Controller)로 연결
CPU는 메모리에 명령어들을 저장하고 기기 제어기를 통해서 하드웨어적인 작업을 수행
boot strap
컴퓨터 전원이 on 될 때 실행 되는 첫 프로그램
Rom에 저장되어 있는 프로그램 메모리에다가 OS를 로딩하는 역할
HDD에 저장되어 있는 OS를 메모리에 로딩하는 역할 특히 커널에 로딩
이 bootstrap이 메모리에 로딩되면 OS가 쭉 돌면서 나머지 응용프로그램들을 메모리 로딩했다가 삭제했다가.. OS가 알아서해줌
"bootstrap 프로그램을 정의하면 운영체제를 메모리에 적재(load)하는 프로그램"
OS를 발에 집어넣는 역할 -> booting
OS를 메모리에 로딩하는 역할이 booting 프로그램
Interrupt
인터럽트란 하드웨어가 작동중에 CPU에게 알려주는 신호(signal)
시스템 버스(system bus)를 통해서 CPU에게 신호를 전송함으로써 어느 시간이던 하드웨어는 인터럽트를 발생시킬 수 있다.
A라는 키보드 눌렀을 때 CPU에게 interupt를 통해 알려줌
메모리에 A 누름 명령어가 적재되고 CPU에게 (interupt)알려준다.
CPU 프로세서와 I/O 디바이스 주변장치하고 서로 통신하는 방법:
H/W가 언제라도 버스 통해서 인터럽트를 트리거할 수 있다.
트리거를 시키면 CPU에다가 시그널을 보내준다 시스템 버스를 통해서 그 시그널을 전송, CPU는 처리함
폰노이만 아키텍처
instruction-execution cycle
컴퓨터에 내릴 수 있는 명령을 instruction set(명령어 집합), 이 명령어 집합에 있는 명령어들로 구성된 set of instructions 프로그램을 메모리에 로딩하면 메모리에 있는 명령어들을 CPU가 하나씩 패치하고 excute하고 excute하고 .. 이 사이클임 : 폰 노이만 아키텍처 (Fetch - Excution Cycle)
인스트럭션을 메모리에서 하나씩 가져오는 그 레지스트를 우리가 인스트럭션 레지스트리라고 한다.(IR)
폰노이만이라는 사람이 제시한 프로그램 내장 방식
1.명령어 실행 사이클(Instruction-execution cycle)은 첫번째로 메모리에서 명령어를 인출(fetches)하고 명령어 레지스터(Instruction Register)에 명령어를 저장
2.명령어는 그런다음 디코딩되어 메모리에서 피연산자(처리될 데이터 그자체)를 가져온다. 그리고 내부 레지스터(Internal Register)에 저장된다.
3.피연산자들에게서 명령어가 실행된 이후에 결과는 다시 메모리에 저장된다.
비휘발성 메모리(storage system)
여러개의 hierarchy로 구성: 용량, 엑세스 타임(속도)에 다라서 계층구조
위로 올라갈수록 속도는 빠르지만 저장용량이 적고 아래로 내려갈수록 속도는 느리지만 저장용량이 많다.
cache와 registers는 CPU에 존재하는 작은 용량의 기억장치
register > cache > main memory(ram) > solid-state disk(SSD) > HDD > opticaldisk > magnetic tapes
I/O structure
현대 컴퓨터 시스템 작동:
CPU는 디바이스(키보드, 모니터 등)에게 입출력을 요청한다.
CPU와 디바이스는 서로 데이터를 통신한다.
디바이스에서 CPU에게 인터럽트를 전송할 수 있다.
CPU는 메모리로부터 명령어를 인출하고 실행하여 결과를 다시 메모리에 적재한다.
디바이스와 메모리는 Memory Access DMA 라고 하는 인터럽트 구조도 있다.
DMA(Direct Memory Access)
하드웨어(HDD, 그래픽 카드 등)들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능
CPU의 개입이 없다.
CPU가 해야할 주변장치와의 전송을 DMA 장치가 대신 해준다. 따라서 CPU의 효율을 향상됨
Computer System Components 정의
CPU : 명령어들을 실행시키는 하드웨어, 프로세서의 종류 중 하나
Processor : 1개의 이상의 CPU가 포함된 물리적인 칩
Core : CPU의 각종 연산을 수행하는 핵심 요소
Multicore : 같은 CPU 위에 여러개의 계산용 코어가 포함되어 있는 것
Multiprocessor : 프로세서가 여러개 인것
Symmetric multiprocessing(SMP)
각각의 CPU 프로세서가 모든 작업을 수행하는 가장 일반적인 다중 프로세서 시스템(multiprocessor systems)
시메트릭 멀티프로세싱할 수 있는 시메트릭 멀티 프로세서들이 탑제되어 있다.
CPU가 한개가 아니라 멀티다.
슈퍼컴퓨터는 CPU가 2백만장은 있을 듯
Multi-core design
CPU 여러개는 돈 많이 드니깐 따로 core만 레지스터, 캐쉬가지고 있는거 회로구성
같은 프로세서 칩 하나에 여러개 코어가 붙어있는 것
멀티코어, 이런 코어가 나누어진게 여러개 붙으면 멀티프로세서
Multiprograming
프로그램 정의: set of instruction
여러개의 프로그램을 동시에 메모리에 올려놓고 동시에 실행시켜줘라
굳이 한 개 올리고 끝나면 버리고 새로 올려놓고 이럴 필요 없다.
"여러개의 프로그램 동시에 올리는 것"
프로세스들이 동시에 올라가 있으면 CPU utilization(사용효율) 높일 수 있다.
Multitasking(=multiprocessing)
프로그램들을 동시에 사용할 수 있게 하는 기술
예를들어 문서 작성할때 내가 입력해주지 않으면 CPU는 논다. 잠깐잠깐 유튜브도 재생하고 timesharing(시분할)을 하자
실행속도가 굉장히 빠를 때 여러개의 job, 프로세서를 자주 바꿔주면 user는 동시에 사용할 수 있다.
CPU Scheduling
운영체제가 다음에 CPU의 의해 실행될 프로그램을 고르는 것
램에 여러개 프로세서가 동시 존재하는데 CPU에 넣었다 뺐다 하는 과정 어느 것을 해줄거냐?? : CPU Scheduling problem
어떤 프로세스를 다음에 실행 시킬지 선택하는 방법
CPU 효율 제일 좋게 만드는 방법이 뭘까?
Operation Mode
user mode, kernel mode
유저모드(user mode)
사용자가 접근할 수 있는 영역을 제한적으로 두고, 프로그램의 자원에 함부로 침범하지 못하는 모드
유저 모드에서 코드를 작성하고, 프로세스를 실행하는 등의 행동을 할 수 있음
커널 모드(kernel mode)
커널 모드란 잘못된 프로그램으로 인해 다른 프로그램이 잘못 실행되지 않도록 하기 위해 사용되는 모드
커널 모드는 모든 자원(드라이버, 메모리, CPU 등)에 접근, 명령을 할 수 있다.
애플리케이션의 어떤 동작이 incorrect program(바이러스나 초보 프로그램)이 시스템 크러쉬 시킬 수도 있다. -> 나쁜 짓 할 수 없도록 막아야한다.
커널모드에서만 할 수 있는게 있으므로 커널모드에서만 h/w제어
OS를 제외한 유저 프로세스들은 직접적으로 하드웨어 제어 못하기 때문에 나쁜짓 하기 힘들다.
Virtualization : 가상화 기술
가상화 기술은 하나의 컴퓨터 하드웨어 위에서 여러개의 다른 운영체제를 실행하는 기술
가상화 기술을 사용하면 하드웨어에 VMM(Virtual Machine Manager)를 올린다.
CPU가 있는데 여러개의 프로세스를 돌릴 수 있으면 운영체제를 여러개 돌릴 수 있지 않을까?
H/W 와 OS들 사이에 중간에 VMM(Virtual Machine Monitor, Manager)을 끼면된다.
CPU 스케줄링 하듯이 os vmm 스케줄링해주면 되지 않느냐? 그럼 OS가 동시에 여러개 돌릴 수 있다.
예전에는 하드웨어가 있고 하나의 커널이 올라가서 여러개의 커널을 관리해 줬다면(왼쪽) 하드웨어가 있고 vmm을 올리고 vm1 vm2 vm3 각각 linux, windows, mac ..등등 여러개의 커널 os들을 동시에 이렇게 실행 시키면 얘들을 컨텍스트 스위치해서 동시에 돌릴 수 있다.
Computing Environments
Traditional Computing : CPU하나에 메모리 하나 붙는 것
Mobile Computing: 휴대폰, 스마트폰, 안드로이드 os
Client-Server Computing : 서버가 있고 그 다음에 클라이언트들이 이 서버에 붙어 가지고 요청(request)을 하고 응답(response)하고,, (웹 서버, 웹 클라이언트(브라우저))
Peer-to-Peer Computing: 음악파일 공유 ..파일 조각 수없이 나눠서 중앙 서버를 거치지 않고 클라이언트 컴퓨터끼리 직접 통신하는 방식 -> 블록체인으로 진화
Cloud Computing: AWS, Azure, Google cloud..
Real-Time Embedded Systems: 화상 탐사로봇 ,, 리얼타임으로 하드웨어 제어하는 운영체제 라즈베리파이나 VXWorks 이런 운영체제(RTOS)
Traditional Computing
네트워크 통해서 서버와 컴퓨터가 1대1 통신 시스템 (웹)
Peer-to-Peer Computing
peer peer peer N대N 통신
Cloud Computing
클라우드 컴퓨팅이란 인터넷을 통해서 서버에 접속하는 컴퓨팅 환경
서버, 버추얼 머신, 스토리지, 네트워크CDN 이 서버안에 모든 컴퓨팅 자원들 프로세싱, 저장 이런 것들이 거대한 하나의 클라우드 구름처럼 가려져있다.
우리는 그냥 터미널을 통해서 클라우드가 제공해주는 서비스들을 잘 조합해서 사용하면 된다.
OS는 프로그램이 실행될 수있는 환경을 제공
User interface
Program execution
I/O operation
File-system manipulation
Communications
Error detection
Resource allocation
Logging
Protection and security
OS가 제공해야하는 시스템
프로그램 execution: 프로세스 매니지먼트
System call: OS에 인터페이스하기 위한 방법
응용 프로그램은 OS하고 어떻게 인터페이스 하느냐? -> system call
OS가 제공해주는 이 서비스들을 System call을 통해서 호출한다.
read하는 것을 어떤장치(file description)에다가 buf 데이터를 count만큼 읽어라, <unistd.h>에 정의되어있음
이 시스템콜 즉, 함수를 호출하는것 : api(Application Programming Interface)
OS의 API: 시스템 콜
사용자가 인터페이스하는 방법
CLI: shells, 명령어 기반으로 인터페이스
GUI: 마우스로 클릭하는 거(Windows, MacOS, KDE/GNOME for Linux, etc
Touch-Screen Interface (Android UI, iPhone UI..)
이 시스템 콜 인터페이스를 통해 사용자가 open하고 read하고 write하고 이게 대부분이다,
유저모드에서 시스템콜하면, 커널 모드로 가서 쭉 처리하고 다시 유저모드로 바뀌고하는데 항상 이렇게 일일이 오픈해가지고 시스템콜을 하려면 힘들다.
그래서 대부분 라이브러리를 제공한다.
예를들어 콘솔에다가 어떤 문자 하나를 쓸라하면 콘솔 오픈해서 문자 버프 보내고 콘솔 클로즈 하고 이런 것들을 일일이 작성하면 귀찮다 ->
printf라는 standard c 라이브러리가 있다. 이 라이브러리를 호출하면 이 라이브러리 안에서 중요한 시스템 콜들은 write해주고 return해주고 여기서 다 처리한다.
프로세스를 제어하는 대표적인 시스템 콜
fork(), wait() .. 곧 배움
'OS 공부' 카테고리의 다른 글
OS 공부 - parent, child, fork, execlp (0) | 2024.10.10 |
---|---|
OS 공부- 프로세스, PCB, Context switch, thread (2) | 2024.10.10 |
OS 공부 - 운영체제, 컴퓨터, 프로그램 (3) | 2024.10.10 |
OS 공부 - CPU 스케줄링, RR, Priority, MLQ, MLFQ (1) | 2024.10.10 |
OS 공부 - CPU 스케줄링, FCFS, SJF, SRTF, (0) | 2024.10.10 |