I. 유저가 컴퓨터를 사용하기 위한 인터페이스(User Interface)
A. GUI (Graphic User Interface)
B. TSI (Touch Screen Interface)
C. Batch
D. CUI (Command Line Interpreter)
셸(Shell)은 운영체제를 사용하기 위한(접근하기 위한) 껍데기이다.
1. bourne shell (초기 셸)
2. bash (리눅스의 셸, bourne again shell)
II. System Programs
OS는 큰 관점에서 볼 때 Kernel + System Programs를 의미하는데, 여기서 System Programs란 프로그램을 편리하게 개발하고 실행하기 위한 환경을 말한다. MacOS, Windows 같은 GPOS(General Purpose Operating System)는 사용자가 어떤 Application Programs를 사용하는지에 따라 목적이 달라질 수 있다.
III. Source code compilation process
C언어로 구성된 소스코드는 컴파일러를 거치면서 기계어로 된 object file로 변환 되고, linker에 인하여 필요한 라이브러리들과 linking 되게 된다. (Static Linking) 이후 실행 가능한 파일을 loader를 통해 메모리에 올려 프로세스로 만들면 프로그램이 실행 되는 것이다. 프로그램이 실행중인 상태일 때 동적으로 메모리에서 linking을 할 수도 있다. (Dynamic Linking)
IV. Linking의 종류
A. Static Linking
Static Linking은 각 프로그램이 동일한 특정 라이브러리를 필요로 할 때 특정 라이브러리를 공유해서 쓰지 않고 각각의 프로그램이 특정 라이브러리단의 코드를 갖는 형태로 만든다. 이는 메모리를 더 소모하여 비효율적이지만 하드웨어 자원이 한정적인 임베디드 시스템에서 주로 쓰인다.
B. Dynamic Linking.
Dynamic Linking은 각 프로그램이 동일한 특정 라이브러리를 필요로 할 때 특정 라이브러리를 메모리에서 공유해서 이용하는 형태이다. OS에서는 기본적으로 Dynamic Linking 방식을 따른다. 리눅스에서는 동적 라이브러리의 확장자가 .sa, .so 형식이며 윈도우에서는 .dll(Dynamic Linked Library) 형식이다.
V. System Call의 원리(Function Call)
User Mode에서 프로세스가 디스크에서 데이터를 읽는 I/O 요청을 위한 read()라는 시스템 콜을 호출했을 때 이 read()라는 함수의 바디 부분은 OS에 존재한다. 시스템 콜이 발생할 때 인터럽트가 발생되고, 각각의 인터럽트는 벡터 테이블에서 특정 벡터 값과 매핑이 되는데, 이를 통해 OS에 존재하는 시스템 콜 함수를 호출 할 수 있는 것이다.
또한 프로세스에서는 printf() 라는 시스템콜을 요청하였지만 kernel 단에서 실제로 수행되는 것은 write()인 경우도 존재한다.
VI. Operating System Structure
A. Monolithic Kernel
운영체제가 가져야 하는 모든 기능들을 하나로 묶은 형태로 갖는 커널이다.
B. Micro Kernel
운영체제가 꼭 가져야 하는 최소한의 기능들만 가진다. 추가로 필요한 기능은 어플리케이션 형태의 서비스(일반 어플리케이션 보다는 권한이 높음)를 만들어서 이용한다.
VII. Monolithic Kernel의 문제점
한 곳에 모든 기능을 넣는 Monolithic Kernel은 다음과 같은 단점이 존재한다.
A. 유지보수 이슈 (소프트웨어 엔지니어링 이슈) 발생 가능
B. Kernel 속 기능들 간의 dependency(의존성) 문제 발생 가능
C. Kernel의 크기가 커져서 이를 위해 하드웨어 성능이 좋아져야 한다.
VIII. Micro Kernel의 문제점
커널이 운영체제가 가져야 할 모든 기능을 한 곳에 갖는 형태가 아니기 때문에 추가적인 기능을 프로세스가 이용하려면 Request Depth가 늘어나게 된다. (오버헤드가 존재한다)
IX. OS의 역할
A. Process Management
B. Memory Management
C. File System Management
D. I/O Management
E. Protection
F. Hardware Control
X. Hybrid Approach
안드로이드는 독자적인 커널을 가지지 않고 리눅스 커널 위에 돌아가는 형태였기 때문에 OS라고 부르지 않고 Framework 혹은 Platform이라고 불렀다. 하지만 현재는 하지만 현재는 안드로이드 라이브러리, 런타임 등을 리눅스 커널과 포함해서 안드로이드 OS라고 부른다.