운영체제에서 지원해주는 서비스 요소
- Process Management
- Main Memory Management – 버추얼 메모리 매니지먼트가 대표적
- I/O System Management – 마우스, 키보드 등 관리(I/O기기 가상화)
- Secondary Storage Management – 하드디스크, SSD에서 데이터를 어떻게 관리하나
- File Management – 파일생성, 폴더생성 관리
- Networking – 인터넷 등등
- Protection System – 시스템을 보호하기 위해 듀얼모드 사용(사용자 모드에서 커널모드로 직접적인 접근을 불가능하게 함 -> 시스템 콜 필요
- Command-Interpreter System – 사용자가 내린 명령어를 해석해주는 시스템(커멘드 창 명령어 해석)
운영체제 구조
운영체제가 있는 모드가 커널모드
하드웨어를 사용하기 위해 하는 요청 -> System Call(운영체제가 만들어 놓은 함수 사용)
System Call Interface – 컴퓨터 간 데이터통신을 위해 필요한 접점(user mode와 kernel mode의 데이터를 주고받는 접점)
UI – 사용자와 시스템 간의 통신이 일어나는 부분
Function Call – 프로그램을 수행할 때 함수를 불러오는 것(사람들이 만들어 놓은 함수 사용)
라이브러리 – 시스템에서 이미 만들어져 있는 함수들을 모아놓은 것(라이브러리 Function Call) ex) fork – 프로세스를 하나 더 만들어달라는 의미(실행은 운영체제에서 함)
Shell – 다른 응용프로그램을 실행하기 위한 하나의 인터페이스를 제공하는 특별한 응용프로그램(ex. 탐색기, cmd) 종류. is, ps
사용자가 Shell을 통해서 커널모드에 있는 기능을 활용하기 위해서는 시스템 콜 인터페이스를 거쳐서 운영체제에 있는 기능들 활용가능(운영체제에서 지원하는 기능들 중 파일시스템관리, I/O관리, 메모리관리, 프로세스관리, 보호, 하드웨어 관리 등을 호출시 시스템 콜을 사용함)
Layered Approach
양파형 계층 – 가운데는 하드웨어존재 하드웨어의 기능을 사용하기 위해 여러 단계(커널모드, 시스템 콜)의 계층을 거쳐서 UI에서 어떤 것을 실행을 하게 되면 앞과 같은 과정을 거침.
System Calls
System Call은 윈도우와 유닉스에서 사용하는 형태가 다르므로 상호호환이 되지 않는다.(다양한 시스템 콜이 존재)
시스템 콜이라는 단어는 유닉스에서 사용된 것이고 윈도우에서는 API라는 말을 사용한다.
but API 최근에는 여러 의미로 사용됨 어플리케이션 프로그램 인터페이스라는 말로 오픈소스나 함수들을 나열해 놓은 라이브러리 같은 것도 API라고 한다.
운영체제가 언제 수행이 되는가?
우리가 컴퓨터를 부팅시킬 때(켤 때)
하드웨어에서 Interrupts 실행을 시킬 때(멈춘 프로세스 중에서 어떠한 곳으로 이동할지를 결정하는 것을 스케줄링이라고 함, 원래 하던 프로세스로 복귀하지 않을 수도 있다.(자원이나 작업효율이 고려되기 때문))
trap(CPU가 자기 자신에게 Interrupts를 거는 exception을 의미함) 시
Linux Booting Process
PC를 부트하는 과정 – 컴퓨터가 켜질 때 명령어를 메모리에 올리고 실행(최초의 명령어가 0xfffffff0 주소에 저장됨 여기서 명령어를 불러옴 따라서 이 명령어는 컴퓨터가 종료되어도 남아있어야 함 때문에 이 데이터는 ROM이라는 공간에 저장됨.)
ex. F2, Delete버튼을 연타하면 ROM BIOS Setting으로 이동됨.
ROM BIOS – 컴퓨터를 켜면 메인보드에 여러 가지 I/O장치, RAM, SSD 등이 잘 부착되어 있는지를 확인함, 하드웨어가 없다면 에러메시지나 블루스크린을 띄움, 모두 정상이면 운영체제를 메모리에 올려놓는 Boot Roader를 실행
Boot Roader – MGR(Master Boot Record)에 저장하고 있다가 부트로더 실행 -> 운영체제가 올라감
Multi_Boot Roader systems – ex. Mac Book에 윈도우OS를 다운받아 사용하는 것
Process Management
(Process – 프로그램 실행의 한 단위)
이러한 프로세스를 생성하고 지우고 다시 생성하는 기능을 수행하는 것
프로그램과 프로세스 구분
program – 하드디스크에 저장되어 있는 어떠한 실행파일
process – 프로그램을 실행시키면 운영체제가 수행할 수 있는 인스턴스 형태로 만든 것
하드디스크에 있는 exe파일을 실행시키면 프로세스 하나를 생성해서 프로그램을 돌림
Main-Memory Management
가상메모리 관리 기법 - 자신이 사용하는 메모리의 용량보다 큰 프로그램도 메모리에 올려놓고 사용가능 함
File Management
하드디스크에 저장이 되어 있는 파일을 어떻게 관리를 할 것인가 하는 것 역시 운영체제가 담당한다.(파일을 생성, 삭제, 디랙토리를 생성, 삭제 등)
File System
File System – 파일들의 관리를 효율적으로 하기 위함(파일이나 디랙토리를 만든다.)
종류에 따라 이름이 있음, 운영체제마다 파일시스템이 각기 다름(NTFS – 윈도우, FAT – Dos, EXT4 – 유닉스)
USB에서도 파일시스템이 있다, 다른 운영체제에서 모두 동작을 함(FAT방식으로 동작을 함, 이것이 윈도우와 유닉스 모두 지원함)
I/O System Management
I/O System Management – I/O장치관리
- A buffer-caching system – 보조기억장치 즉 하드디스크, SSD에 저장되어 있는 정보에 대해서 입출력 효율을 높이기 위해 메모리(주기억장치)에 일정영역을 캐시로 사용함.
- A general device-driver interface – 마우스나 키보드 등과 같이 하드웨어들을 사용 시 드라이브를 설치
- Drivers for specific hardware devices
I/O Abstraction(ex. LG, 삼성, 애플에 나오는 마우스를 각각으로 보지 않고 어떤 추상화된 개념으로 보는 것)
- The OS provides a standard interface between programs and devices
- File system, Sockets, I/O devices, etc. -> 이런 것들을 추상화해서 사용할 수 있도록 해줌 -> 프로그램 환경을 제공해줌
Secondary-Storage Management
Secondary-Storage(저장소) Management – 저장소를 효율적으로 관리해주는 시스템
여유부분에 대해 어디에 저장을 할지, 디스크를 읽어올 때 어떻게 스케줄링해서 읽어올지를 관리 해줌.
Networking
Networking –> 운영체제에서는 실질적으로 다루지 않지만 중요함
Protection System -> 지난시간에 다룸
Command-Interpreter System
Command-Interpreter System – 사용자가 명령을 직접 입력시켜 실행시키는 시스템
- process creation and management – 프로세스 관리
- I/O handling – I/O처리
- secondary-storage management – 스토리지 관리
- main-memory management – 메모리 관리
- file-system access – 파일 시스템 접근
- protection - 보호
- networking – 네트워킹
Command-Interpreter System
- Shell – 위에서 말한 커맨드 인터프리터 시스템으로 만듦
- A particular program that handles the interpretation of users’ commands
- Helps to manage processes
- Types
- A standard part of the OS
- MS-DOS, Apple II
- A non-privileged process
- sh(최초의 쉘) / csh / tcsh / zsh / ksh on UNIX
- No command interpreter
- MacOS
System Calls – 운영체제에서 사용하는 함수(윈도우에서는 win32, API라고 한다.)
Types of System Calls
System Calls -> 시스템 콜이 수행하는 일
- Process control
- File management
- Device management
- Information maintenance
- Communications
Invoking a System Call
user space – 사용자 모드
kernel space – 운영체제
ex) read함수 – 하드디스크에 저장되어 있는 파일을 불러다 메모리에 저장하는 역할을 함, 파라미터(파일 위치, 메모리에 읽어드릴 주소, 읽어드릴 메모리의 바이트 수)
호출된 함수는 레지스터에 입력이 되고 사용자 모드에서는 하드디스크의 직접 접근이 불가능하므로 trap을 통해 커널모드로 진입을 함 -> 커널모드에 접근 후 시스템 콜 핸들러가 해당 명령어를 처리하고 결과 값을 반환해 줌. 이 페이지의 경우 반환된 값은 count라는 변수에 저장이 된다.
System Programs
System Programs – 운영체제를 정의할 때 커널 + 시스템프로그램이라고 함 여기서 시스템 프로그램이 이것이다.
가장 대표적인 시스템 프로그램 -> 탐색기
윈도우를 깔면 같이 깔림!
시스템 프로그램은 프로그램 개발, 구현에 편리한 환경을 제공해줌
제공기능
- File manipulation
- Status information
- File modification
- Programming language support
- Program loading and execution
- Communications
- Application programs
운영체제의 구성
monolithic kernel – 파일시스템, 가상메모리, I/O드라이버, 프로세스 컨트롤 등을 한 곳에 모아놓고 구현한 것
문제1 – 기능을 추가하다보면 커널이 너무 커져서 실행 시 메모리가 많이 필요함 -> 임베디드 시스템에서는 활용이 어려움(무거움) -> 커널의 크기가 매우 큼, 하나변경 시 전체 커널을 변경해야함(but, 빠르게 작동이 가능)
but 요즘은 많은 발전으로 임베디드 시스템에도 모놀리틱 커널을 사용하기도 함
문제2 – 한곳에 뭉쳐서 개발을 하다 보니 기능들이 엉켜있어 굉장히 복잡한 구조가 됨(소프트웨어 공학 이슈가 생김)
->이러한 문제를 해결하기 위해 등장한 구조가 마이크로 커널
MS-DOS시스템과 유닉스 시스템은 모놀로틱 커널 구조를 가짐
장점 – 하나로 통합 구현이 되어 있어 컴포넌트 간의 커뮤니케이션이 효율적이다.
단점 – 특정한 디바이스 드라이브를 추가, 삭제 하려면 커널을 재빌드해야 함...
유닉스 시스템구조
맨 위에 사용자가 있고 아래에 쉘이나 커멘드 명령어를 통해서 입력을 하게 되면 컴파일러와 인터프리터를 통해서 명령어를 해석을 하고 시스템 라이브러리를 통해서 시스템 콜을 호출함
-> 시스템 콜 인터페이스를 통해서 커널 모드로 접근 -> I/O디바이스에 대한 내용, 파일 시스템, 시스템 스케줄링 같은 서비스가 한곳에 구현이 되어 있어 사용이 가능한 구조이다. -> 다음으로 하드웨어 커널 인터페이스를 통해서 각각의 컨트롤러(I/O디바이스에는 각각 하나의 컨트롤러가 붙어있다.)들을 통해서 제어를 하고 있음
-> 전반적인 운영체제의 구조
Microkernel System Structure
Micro kernel – 위의 모롤리틱 커널의 문제점을 해결하기 위해서 아주 작게 필요한 서비스들을 서버형태로 구성을 해서 구현한 운영체제(구조 – 중요한 커널은 밑에 커널 단을 만들어 놓고 조금 덜 중요한 부분들을 각각의 서버형태로 관리를 해준다.
장점 – 각 서버를 추가하는 방식이기 때문에 기능의 추가가 쉽고 시스템이 견고하고 real-time성이 높다.
단점 – 시스템 기능들을 서버의 형태로 존재하기 때문에 커뮤니케이션에 오버헤드가 발생할 수 있다.
어플리케이션 관리, 파일 시스템, 디바이스 드라이버 같은 것들은 유저 모드에서 쉽게 접근이 가능하다.
윈도우의 구조는 하이브리드 커널(통합 구현한 모놀리틱 커널과 각 서버를 추가하는 방식의 마이크로 커널의 혼합) 방식이다.
유저모드에서 사용할 수 있는 기능들은 시스템을 사용하면서 변경이나 추가가 될 수 있는 부분들만 따로 유저모드로 올리고 나머지 부분들만 커널모드로 둠(커널 사이즈는 적절하게 큰 편으로 커널 자체나 핵심서비스가 변경이 되지 않는 한 커널자체를 다시 컴파일 할 필요는 없음, 속도측면에서도 모놀로틱 커널수준은 아니더라도 마이크로 커널보단 빠른 편임)
장점 – 구조적으로 쉽게 시스템기능을 추가 할 수 있고 커뮤티케이션에 오버헤드를 줄였음
-> 웬만하면 모놀로틱과 마이크로 커널로만 구분하는게 일반적이다.
Virtual Machines (컴퓨터 하나에 여러 가지 os를 설치해서 여러 시스템을 작동시킴)
VM웨어 – 윈도우 위에 가상머신을 만들어서 다른 운영체제를 설치할 수 있도록 해주는 소프트웨어
(물리적으로 존재하는 컴퓨터가 아닌 다른 컴퓨터가 만들어 내는 가상의 컴퓨터 -> 컴퓨터위의
컴퓨터)
에뮬레이터 – 다른 프로그램이나 장치를 모방하는 컴퓨터 프로그램(지원되지 않는 하드웨어에서 소프트웨어를 실행하기 위한 목적으로 쓰임, 윈도우 운영체제에서 플레이스테이션이나 에스박스 전용 게임을 돌리려면 데이터만 복사해서는 돌아가지 않는다.)
가상머신 – 무언가를 에뮬레이션 하는 것이라면 어떤 소프트웨어든 가상머신이라 할 수 있다.
하나의 컴퓨터에 여러 개의 시스템을 작동시키는 것
가상머신 구조 – 맨 아래 하드웨어 존재 그 위에 운영체제(윈도우, Mac OS)가 있고 그 위에 VM웨어가 다른 운영체제를 작동시킴
JVM – 가상머신의 또 다른 형태 자바 버추얼머신 위에 자바스레드를 통해 자바 기반 어플리케이션이 돌아갈 수 있게 해줌(이것 덕에 자바프로그램이 어느 기기, 어느 운영체제 위에서 돌아갈 수 있는 것이다.)
원래 컴퓨터 시스템은 하나의 하드웨어 계층에서 운영체제를 통해서 하나의 프로세스만 수행하는 구조이지만 그 위에 VM웨어를 깔게 되면 여러 가지 운영체제를 가지는 컴퓨터를 가상으로 만들 수 있다. 이 말은 즉, 피지컬적으로는 컴퓨터가 한 대인데 여러 개의 컴퓨터가 있는 작동하게 하는 것을 버추얼 머신이라고 함
장점 – 경제적인 측면이 무척 크다.
단점 – 컴퓨터에 가상머신 다운으로 컴퓨터 자원을 분산시킴(성능문제)
버추얼 머신이 발전해서 현재의 클라우드 컴퓨팅기술이 나올 수 있었던 기초가 되었다.
자바 버츄얼머신(JVM) - 여러 가지 운영체제에서 자바 기반 프로그램들이 수행될 수 있게 해줌(Just-In-Time) 동적변역 -> 실제 실행하는 시점에서 즉각 기계어로 변역하는 컴파일링 기법을 통해 성능이 상당히 좋다.
2장 운영체제 시스템 구조를 봄
2장 복습
운영체제 컴퓨터 하드웨어
컴퓨팅 환경 제공
관리 시스템 서비스 지원 필요
'👨💻Computer Science > 운영체제[OS]' 카테고리의 다른 글
[운영체제] 6장 Synchronization (0) | 2021.06.29 |
---|---|
[운영체제] 5장 Process Scheduling (0) | 2021.06.29 |
[운영체제] 4장 Multithreaded Programming (0) | 2021.06.29 |
[운영체제] 3장 Process Concept (0) | 2021.06.29 |
[운영체제] 1장 Introduction (0) | 2021.06.29 |
댓글