OS의 구조에 대해서 알아보며 이제 본격적으로 OS의 디테일한 내용에 다가가보자!
User Interface
Batch(큰 그룹을 나눠서 처리. not interactive, Scheduling), CLI(Command-Line), GUI(Graphics User Interface)
Program execution - 프로그램 실행.
메모리 Load → Run → End
I/O Operation
다양한 종류의 i/o 작업을 지원
File System Service
read, write, create, delete, search, list, permission
Communication - process , network
Shared Memory : 메모리를 공유하는 과정에서 읽기,쓰기 작업이 발생
Message Passing : Message를 save, receive
Error detection - OS는 error에 대한 action(에러처리 프로그램)을 실행
debugging : 수정하는 툴
communications : network를 통해서 computer 사이에서 의사소통 테그닉을 제공, process끼리의 의사소통을 제공
Error Detection
error가 발생하면 처리해주는 역할을 제공한다. 어떤 유형의 interrupt가 발생하는지 잡고 그것을 처리해준다.
Debugging을 사용해서 발생한 error를 찾고 수정을 한다.
Resource : cpu, main memory, file storage 등
프로세스가 공평하게 실행되고 완료되면 자원을 반환한다.
Accounting : 누가 computer resource를 얼마만큼 사용하고 차지하고 있는지 기록하는 서비스
"To keep track" 서비스로 성능을 조절하기 위해서 계속 지켜보고있는 서비스이다.
ex). cpu의 사용률이 80%이상 된다면 다음 업그레이드시에 이를 고려하여 cpu를 확장시킨다.
Protection and security : 컴퓨터 자원에 대한 접근제어
보호(access to system resource)와 보안(Authentication)을 제공한다.
Command Line Interface - 명령어 창에 직접 입력해서 작업을 진행하는 인터페이스 방식
kernel에 built-in하는 방식과 system program으로 제공하는 방식이 존재
User-friendly desktop metaphor interface
운영체제의 서비스를 사용하기 위해서 제공되는 interface이다.
대표적으로 Win32 API, POSIX API, JVM(Java Virtual Machine)에서 제공하는 JAVA API 등이존재한다.
왜 system call을 직접 사용하지 않고 API를 이용하는가?
사용하기 쉽고 효율적이기 때문이다.
ex) copy
copy과정에서 굉장히 많은 기능들이 필요하고 이를 위해 많은 system call이 동작한다.
ex) win32 API - ReadFile()
파일을 읽을 때 위와 같이 ReadFile이라는 함수에 parameter를 넘겨주어 파일을 읽어오는 system call을 호출한다.
number로 system call이 작성되어있는 table에서 system call이 있는 곳의 시작 위치를 찾는다.
찾은 뒤 프로그램을 동작시키고 return된다.
사용자는 kernel에서 동작하는 system call이 어떻게 실현되는지 알 필요없고 api 사용방법만 알면 OS service를 system call을 통해서 제공받을 수 있게된다.
printf : library call -> write : system call
user mode에서 printf가 실행되면 C 라이브러리에 접근하고 kernel 모드로 넘어가며 write()라는 System call이 발생한다.
이후 table을 뒤져 실행명령어가 존재하는 주소값을 가져오고 찾아가서 프로그램을 실행시킨뒤 응답한다.
x번지에 parameter register의 시작주소를 담는다.
system call의 number를 kernel에서 table에처 찾은 뒤 code를 동작시키는데 이때, 사용되어야할 paramter가 x번지에 있음을 알수있도록 함께 넘겨준다.
x번지에서 parameter를 가져와서 사용한다.
process control
file management
Device management
Information maintenance
Communication
등에 해당하는 System call이 존재한다.
system program이란 사용자가 system call을 사용하기 쉽도록 만들어진 User Interface를 의미한다.
User는 System program을 사용할 뿐 직접 system call을 사용하지도 않고 눈에 볼 수도 없다.
File 관리
create, delete, copy, print, dump 등
status imformation
registry : 상태정보를 저장하기 위한 레지스터들의 묶음
status : date, time, amount of available
memory, disk space, number of users
로그와 디버깅 정보 등이 존재할 수 있다.
file modification
programming-language : 명령어를 실행파일로 변경해주는 역할
compiler(한번에 기계어로 번역했을 경우를 컴파일러라고함 - high level language), assemblers( low level language를 기계어로 번역), interpreters(한줄한줄 번역)
loading : memory로 실행시키기 위해서 가지고 올라오는 것.
절대 로더 : 한번 메모리로 가지고 오면 메모리 위치가 변화하지 않는다.
relocatable loader : memory 위치가 변화할 수 있음
linkage editor : 실행시킬 프로그램을 연결해주는 역할
overlay-loader : memory위로 올려주는 로더이지만 중첩기능이 포함되어있는 메모리 로더. 프로세스 하나가 사용중인 메모리를 다른 프로세스가 특정 빈 부분을 비었을 때 사용이 가능하다. 프로그램을 효율적으로 동작시키기 위해서 필요하다.
communication : 한 사용자가 다른 사용자에게 메시지나 이메일을 보내는 것. 원격 로그인 등
이때, policy에 대한 machanism은 변경 가능성을 고려해서 Policy와 Mechanism을 "구분해서" 고려하고 설계를 진행해야한다.
level로 나뉘어져있는 OS 모델인데 bottom layer가 layer0으로 구분된다.
hardware가 0번의 layer -> hardware를 구동시키는 프로그램(Device Driver) -> ....(File Manager) -> User interfacc가 n번의 layer
kernel을 사이로 application program과 device를 구분하고 그 사이에서 OS 기능을 제공한다.
다만, kernel의 역할이 커진다는게 단점이다.
virtual machine은 hardware를 독립적으로 존재하도록 할 수 있다.
scale out 방식으로 수평적 확장을 instance추가를 통해서 제공한다.
VM WARE
virtualization layer를 통해서 가상화가 진행된다.
자원을 효율적으로 나눠서 놀고있는 자원이 없도록 여러대가 사용할 수 있도로 제공한다.
JVM
호환성이 좋다.
class를 interpreter 방식으로 읽고 host는 이것을 사용하기만 하면 된다.
지금까지 OS의 구조와 서비스가 어떻게 제공되는지에 대해서 알아보았다!
다음시간에는 서비스가 제공될 때 process가 어떻게 동작하는지에 대해서 알아보겠다~