운영체제란 ? 컴퓨터의 핵심 SW이다. HW를 사용자가 이용하기위한 연결역할.
=> 어떻게 ? HW중 메모리에 항상 load(상주)하며 cpu스케줄링, 메모리관리, 파일관리, 입출력 관리, 프로세스관리 등 자원을 관리, 작업을 처리.
(이 때, CPU의 역할은 사용자들이 입력한 명령어를 해석하고 연산한 후 그 결과를 제어하는 장치이며, 하드웨어의 메인보드 안에 해당)
한마디로, 운영체제는 사용자와 하드웨어를 연결해주는 역할 : 사용자에게 보여지는, 연결되는 방식 : iterface ?
@ System call
시스템콜은 커널(운영체제)와 사용자 interface(프로그램)을 이어주는 역할이다. OS에 의해 사용가능하게 된 서비스에 대한 로우레벨 작업을 하는 코드.
프로세스가 하드웨어에 접근해 필요한 기능을 사용할 수 있도록 해준다.
~ linux : posix api 제공 , -> API사용자는 systemcall구현, 작업 알지 못해도 되며 호출 결과만 파악하면 되기때문에 편리
사용자모드와 커널모드
-커널모드 : program counter가 운영체제 존재부를 가리키고있을 때. 운영체제 코드 수행중. 커널모드 수행중
-사용자모드 : 사용자 프로그램 존재메모리 가리키는경우. 사용자 프로그램 수행중, cpu가 사용자모드에서 수행중
program counter:명령어 포인터.
다음에 수행될 명령어의 주소를 가지고 있는 레지스터,
PC 값은 word의 크기에 따라 1 또는 명령어 길이(바이트 수)만큼 씩 증가되어
기억장치에 저장되어 있는 명령어를 수행.
참고 ) cpu내부 PC, AC, MAR, MBR, IR : CPU 레지스터
system call
운영체제 매개변수 전달 방법
-(1) Register : 매개 변수를 CPU 레지스터 내에 전달한다.
-(2) Block : 메모리 블록에 저장, 블록 주소가 레지스터 내에 전달 => 매개변수 개수나 길이 제한 x
-(3) stack : 프로그램스택에 저장 => 매개변수 개수나 길이 제한 x
하드웨어 장치가 CPU와 커뮤니케이션 하고싶을때, 어떤 사실을 알려주거나 CPU의 자원,서비스를 요청해야할 때 '인터럽트'발생으로 실현. (프로그램이 명령 수행을 위해서는 CPU를 할당받아야함)
: CPU는 program counter가 가리는 곳 명령을 수행한 뒤, 다음 명령을 수행하기 직전에 인터럽트 라인이 세팅되어있는지 체크 . 이러한 루틴을 매번 반복하며 프로그램 명령을 수행한다.
-> 인터럽트 발생 시 CPU는 현재 수행중이던 프로세스 멈추고, 운영체제의 인터럽트 처리 루틴으로 이동해 인터럽트 처리 수행.
운영체제(시스템)은 다양한 structure로 구현.
monolithic : simple structure
Layerd Approach : 운영체제가 계층으로 나누어지는 구조
Micro Kernel : 커널에 핵심적인 요소만 남긴 가벼운 커널(Kernel 모듈화)
=>나머지는 ? : user영역으로.
Modules : 커널을 객체지향적 접근으로 모듈화. 핵심 구성요소들이 분리 가능.
Hybrid Systems : strict하게 구조를 채택하는 것이 아닌 유연하게 다양한 구조를 결합하는 것.
monolithic구조
- 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 파일로 구성하는 구조(구조랄게 없는 구조). (msdos, 초기 unix등. . .)
monolithic구조인 msdos는 사용자 프로그램이 I/O루틴에 접근해 디스플레이와 디스크 드라이브에 직접 쓰기가 가능했고 User프로그램에 문제시 전체시스템에 문제가 있을 수 있었다. 초기 unix구조(위 이미지)는 커널/시스템프로그램으로는 구분해 구성했고 커널이 모든기능제공해 monolithic = unix는 kernel부분을 확장해나가며 발전했는데, 구현, 유지보수, 확장이 힘들었다.
장점으로는 Systemcall overhead가작다(때문에 hybrid식으로 활용되기도함-windows..)
Layered Approach
- 계층적으로 운영체제를 나누어 구성하는 구조. (네트워크 7계층처럼 . . 추상적 객체를 구현 - bottom: 하드웨어 /top사용자 인터페이스 )
구현,디베겅,유지보수가 쉽다. But Systemcall overhead 다른구조들보다 존재
Micro Kernel
- 커널에 핵심적인 요소만 남긴 가벼운 커널(Kernel 모듈화 : 커널 서비스를 기능에 따라 모듈화 하여 각각 독립된 주소 공간에서 실행 : 상주하는 기능의 범위가 축소되고, 그 때 그 때 필요할 때 마다 로드될 수 있는 서비스들이 증가. : 메모리에 이점)
- 마이크로커널의 주 기능은 Client와 User공간에 수행되는 다양한 서비스간 메세지패싱방식 통신 제공,
요즘 유행하는 msa 서버 구성으로 이해. 기존 서버 구성: 내부 url로 요청을보내는 식인데(매핑핸들러) msa구조일 때는 기능이 독립되어 구성되있는 서버로 api호출.(하나의 클라이언트-서버처럼 동작) -> 이런 식으로 내부통신이 아니고 독립된 개별간 통신하기때문에 message통신 하는 것으로 이해. )
- 대표적기능 프로세스간통신(메세지패싱) /메모리관리 / CPU스케줄링 등 모두 message기반(파일 읽고싶을때 file입출력 usermode의 file system에 message를 보내 요청하는 형태)
장점은 메모리 상주 감소, 운영체제 확장 쉬움.
단점은 가중된 시스템동작 오버헤드 때문에 성능감소, 기능많이추가시 속도 느려짐
*** monolithic vs microkernel
https://selfish-developer.com/entry/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9DMonolithic-kernel%EA%B3%BC-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9CMicro-%EC%BB%A4%EB%84%90
Module
- 가장 현대적인 OS구조, 커널을 모듈화.
커널 각 부분이 정의되고 보호된 인터페이스를 가진다는 점에서 계층구조를 닮았지만, 모듈에서 단계별로가 아닌 임의로 다른 모듈을 호출할 수 있다는점에서 계층구조보다 유연.
중심 모듈은 핵심 기능만을 가지고 있고 다른 모듈들 적재, 통신방법 안다는 점에서 마이크로커널과 유사하지만, 통신하기위해 메세지전달 호출 필요가 없어 효율적. micro kernel은 sub system(kernel)들 교체 가능하지만, 모듈의 개념은 kernel이 분리되었냐의 여부는 아님. 프로그램 일부 코드롤 동적으로 삽입, 교체의 개념. (모듈에서는 핵심 기능만을 지닌 커널에 다른 모듈들을 적재, 제거하지만 마이크로 커널에서는 핵심 기능만을 지닌 커널에 독립시킨 kernel(sub system)들을 통해 통신해 기능 사용)
-> 부팅시 혹은 실행중 필요할 때 서비스들을 link 가능. (loadable)
monolithic 커널은 모듈식일 수 있다. 리눅스가 monolithic이지만 모듈 도입.(초기에는 리눅스에 새로운 하드웨어 추가하려면 monolithic했기 때문에 새로운 컴파일이 필요했지만, 동적으로 kernel안에 코드를 삽입,제거할 수 있는 module방법이 개발되었고 device driver와같이 사용.)
hybrid시스템
다양한 구조를 결합해 보안/성능/편리성 문제 해결, 혼용구조
일반적인 프로그램은 disk에 이진 실행 파일로 존재,
CPU에서 실행하려면 프로그램을 메모리로 가져와
프로세스 형태로 배치해야함.
링크 및 로드-> 프로그램 부분에 최종 주소를 할당하고 프로그램 코드와 데이터를 해당 주소와 일치하도록 조정하여 프로그램이 실행될 때 코드가 라이브러리 함수를 호출하고 변수에 접근할 수 있게 한다.
(1) 셸은 fork()시스템 콜을 사용하여 프로그램을 실행하기 위한 새 프로세스를 생성한다.
(2) 그런 다음 셸은 exec() 시스템 콜로 로더를 호출하고 exec()에 실행 파일 이름을 전달한다.
(3) 로더는 새로 생성된 프로세스의 주소 공간을 사용하여 지정된 프로그램을 메모리에 적재한다.
시스템 대부분에서는 프로그램이 적재될 때 라이브러리를 동적으로 링크할 수 있는 기능을 지원한다. (ex. The dynamic linked library(DLL) of Windows)
링커는 프로그램이 적재될 때 동적으로 링크되고 적재될 수 있도록 재배치 정보를 삽입하기 때문에 여러 프로세스가 동적으로 링크된 라이브러리를 공유할 수 있어 메모리 사용이 크게 절약될 수 있다.