OS Design and Implementation
- There is no best/absolute answer for design and implementation of OS
- But some approaches have proven successful
- Internal structure of different operating systems can vary widely
- OS 설계 및 구현에 대한 최선의/절대적인 해답은 없다.
- 그러나 일부 접근 방식은 성공적인 것으로 입증되었다.
- 운영 체제에 따라 내부 구조가 크게 달라질 수 있다.
- Start the design by defining goals and specifications
- Affected by choice of hardware and type of system
- Specifying design requirements can be considered with
- User goals–operating system should be convenient to use, easy to learn, reliable, safe, and fast
- System developer goals –operating system should be easy to design, implement, and maintain, as well as flexible, reliable, error-free, and efficient
- 목표 및 사양을 정의하여 설계 시작
- 하드웨어 선택 및 시스템 유형의 영향을 받는다.
- 설계 요구사항 지정은 다음과 같이 고려할 수 있다.
- 사용자 목표 – 운영 체제는 사용하기 편리하고, 배우기 쉽고, 신뢰할 수 있고, 안전하고, 신속해야 한다.
- 시스템 개발자 목표 – 운영 체제는 설계, 구현 및 유지보수가 용이해야 하며 유연하고 안정적이며 오류가 없으며 효율적이어야 한다.
- The important principle is separating policyand mechanism
- Policy
- What should be done?
* Policy decisions are important for all resource allocation problems
- Mechanism
- How to do something?
- The tool for implementing a set of policies
- It allows maximum flexibility if policy decisions are to be changed later
- Policies are likely to change depending on workloads, places, or over time
- A general mechanism, separated from policy, is more desirable
- 중요한 원칙은 정책과 메커니즘을 분리하는 것이다.
- 정책
- 어떻게 해야 할까요?
- 모든 리소스 할당 문제에 대해 정책 결정이 중요함
- 메커니즘
- 어떻게 하는 거야?
- 정책 세트를 구현하기 위한 도구
- 정책 결정이 나중에 변경될 경우 최대의 유연성을 제공한다.
- 정책은 워크로드, 장소 또는 시간 경과에 따라 변경될 수 있다.
- 정책과 분리된 일반적인 메커니즘이 더 바람직하다.
Separating Policy and Mechanism
- Example: CPU scheduler
- Want to switch processes in the system
- Policy (what)
- Scheduling algorithm (FIFO, SJF, priority scheduling, …)
- Quantum size (= time slice)
- Mechanism (how)
- Dispatcher for low-level context switching
- Measure job length
- Priority queues
- 예: CPU 스케줄러
- 시스템에서 프로세스를 전환하고자 함
- 정책(무엇)
- 스케줄링 알고리즘(FIFO, SJF, 우선순위 스케줄링 등)
- Quantum size(= 타임슬라이스)
- 메커니즘(방법)
- 저수준 컨텍스트 전환을 위한 디스패처
- 작업 길이 측정
- 우선 순위 대기열
OS Implementation
- Many variations …
- Early OSes are written in assembly language
- Then system programming languages like Algol, PL/1
- Now C/C++ prevails
- Actually, a mix of languages in practice
- Lowest levels in assembly
- Main body in C
- Systems programs in C, C++, scripting languages like PERL, Python, shell scripts
- High-level languages are easier to port to other hardware
- 다양한 변형...
- 초기 OS는 어셈블리 언어로 작성된다.
- 그리고 Algol, PL/1과 같은 시스템 프로그래밍 언어를 사용한다.
- 이제 C/C++가 우세하다.
- 사실, 실제로는 언어가 섞여 있다.
- 어셈블리에서 가장 낮은 수준
- C의 본체
- C, C++, 스크립트 언어(예: PERL, Python, 셸 스크립트)의 시스템 프로그램
- 고급 언어를 사용하면 다른 하드웨어로 쉽게 이식할 수 있다.
Operating System Structure
- General-purpose OS is very large program
- Various ways to structure ones
- Simple structure –MS-DOS
- Monolithic --UNIX
- Layered –Abstraction-based
- Microkernel –Mach
- 범용 OS는 매우 큰 프로그램이다.
- 구조화하는 다양한 방법
- 간단한 구조 – MS-DOS
- 모놀리식 --UNIX
- 계층형 – Abstraction-based
- 마이크로커널 – Mach
Simple Structure: MS-DOS
- Written to provide the most functionality in the least space
- Not divided into modules
- Although MS-DOS has some structure, its interfaces and levels of functionality are not well separated
- Allow applications to access HW
- No user-and kernel-mode separation by Intel 8088
- 최소 공간에서 가장 많은 기능을 제공하도록 작성되었다.
- 모듈로 분할되지 않는다.
- MS-DOS는 일부 구조를 가지고 있지만, 인터페이스와 기능 수준이 잘 분리되어 있지 않다.
- 애플리케이션의 HW 액세스 허용
- Intel 8088에 의한 사용자 모드와 커널 모드 분리 없다.
최소 공간에서 가장 많은 기능 제공
모듈 제공x, 인터페이스와 기능 수준 분리x, HW 억세스 허용
MS-DOS
previled instruction을 통해 hw에 직접 접근할 수도 있고, 전체 시스템을 망가뜨리거나 중요한 데이터를 외부에 유출할 수도 있다.
system protectuer에 대해 고려하지 않는 디자인이다
- Single-tasking, single memory space
- Shell(command interpreter) invoked when system booted
- Simple method to run program
- Loads program into memory, overwriting all but the kernel and a small part of CI
- No other processes created
- Program exits -> the remaining CI reloads theoverwrittenpartfrom the disk
- 단일 작업, 단일 메모리 공간
- Shell(명령 인터프리터)가 시스템 부팅 시 호출된다.
- 간단한 프로그램 실행 방법
- 프로그램을 메모리에 로드하여 커널과 CI의 작은 부분을 제외한 모든 부분을 덮어쓴다.
- 다른 프로세스가 생성되지 않는다.
- 프로그램 종료 -> 나머지 CI가 디스크에서 덮어쓴 부분을 다시 로드한다.
단일 메모리 공간. 프로그램 실행 시 프로세스가 커널과 CI 작은 부분 제외한 모든 부분 덮어쓴다.
Layered Structure
- OS is divided into a number of layers (levels), each built on top of a lower layer
- The bottom layer (layer 0), is the hardware; the highest (layer N) is the user interface.
- Layers are selected such that each layer uses functions (operations) and services of only lower-level layers
- Modular
- Simplifies the extension and maintenance of the code base
- E.g., Multics with 8 rings of protection
- OS는 여러 계층(레벨)으로 나뉘며, 각 계층은 하위 계층 위에 구축된다.
- 맨 아래 계층(0계층)은 하드웨어이고, 가장 높은 계층(N계층)은 사용자 인터페이스이다.
- 각 계층이 하위 계층의 기능(작업)과 서비스만 사용하도록 계층이 선택된다.
- 모듈러
- 예: 보호 링이 8개인 멀티캐스트
Traditional UNIX System Structure
- Beyond simple… but not fully layered
- 단순함을 넘어 완벽하게 계층화되지 않음
어느 정도 계층화는 이루어져있지만, kernel 파트에서는 계층화가 되어 있지 않다.
Monolithic: UNIX
- “The Big Mess” – a single large software system
- Consists of everything below the system-call interface and above the physical hardware
- Provides a large number of functions for one level
- the file system, CPU scheduling, memory management, I/O, …
- "큰 혼란" – 대규모 소프트웨어 시스템 하나
- 시스템 호출 인터페이스 아래와 물리적 하드웨어 위의 모든 것으로 구성된다.
- 한 수준에 대해 많은 수의 기능을 제공한다.
- 파일 시스템, CPU 스케줄링, 메모리 관리, I/O, …
UNIX : 많은 기능 제공
- Advantage: Performance!
- All UNIX variants (Solaris, HP-UX, Linux, BSD), early Windows
- Disadvantages
- Difficult to maintain and upgrade due to interdependencies in the code
- Security / reliability
- Any component of OS can ruin entire system
- Entire OS code runs in a single memory space
- E.g., Over 35,000 drivers with over 120,000 versions on Windows XP
» 85% of Windows XP crashes are from drivers
» Drivers are 7x buggier than the kernel core
- 장점: 성능!
- 모든 UNIX 변종(Solaris, HP-UX, Linux, BSD), 초기 Windows
- 단점
- 코드의 상호의존성으로 인해 유지보수 및 업그레이드가 어렵다.
- 보안/신뢰성
- OS의 모든 구성 요소가 전체 시스템을 손상시킬 수 있다.
- 전체 OS 코드가 단일 메모리 공간에서 실행된다.
- 예: Windows XP에서 120,000개 이상의 버전을 가진 35,000개 이상의 드라이버
» Windows XP 충돌의 85%는 드라이버에 의한 것이다.
» 드라이버는 커널 코어보다 7배 더 버그가 많다.
Monolithic UNIX: 장점 - 성능, 단점 - 상호의존성, 보안/신뢰성
Microkernel
- Moves out as much as possible from the kernel to user-space services
- Mach is an example of microkernel
- Mac OS X kernel (Darwin) partly based on Mach
- Communication takes place between user modules using message passing
- 커널에서 사용자 공간 서비스로 최대한 이동
- Mach는 마이크로커널의 한 예이다.
- Mac OS X 커널(Darwin)은 부분적으로 Mach를 기반으로 한다.
- 메시지 전달을 사용하여 사용자 모듈 간에 통신이 이루어진다.
Monolithic의 문제점 해결. kenel에서 user space로 최대한 이동. Mach가 예시.
메시지 전달을 사용하여 모듈 간 통신
- Benefits
- Easier to extend a microkernel
- Modular structure (easy to add services)
- Easier to port the operating system to new architectures
- More reliable, secure
- Less code is running in kernel mode
- Can be tested more rigorously
- Disadvantages
- The performance overhead of communicating with user-level system services
- 혜택
- 더 쉬운 마이크로커널 확장
- 운영 체제를 새로운 아키텍처로 쉽게 이식
- 더욱 안정적이고 안전한
- 커널 모드에서 실행 중인 코드 수가 적음
- 보다 엄격하게 테스트 가능
- 단점
- 사용자 수준의 시스템 서비스와 통신하는 데 필요한 성능 오버헤드
Microkernel
장점 - 쉽게 OS 확장 가능. 안정적이고 안전함
단점 - 통신하는데 성능 오버헤드
Monolithic vs. Microkernel
- Monolithic kernels
- Pros: Simplicity and Performance benefits
- Cons: Complexity and Less extensibility
- Microkernels
- Pros: Easier for extension, More reliable (less code is running in kernel mode)
- Cons: Performance overhead of communicating with system services
- Tanenbaum-TorvalsDebate, initially started in 1992
- 모놀리식 커널
- 장점: 단순성 및 성능 이점
- 단점: 복잡성과 낮은 확장성
- 마이크로커널
- 장점: 확장이 용이하고 신뢰성이 높다(커널 모드에서 실행되는 코드 수가 적음).
- 단점: 시스템 서비스와 통신하는 데 따르는 성능 오버헤드
- Tanenbaum-Torvals Debate는 1992년에 처음 시작되었다.
장단점 기억하기
Monolithic: 성능 / 낮은 확장성
Microkenrenl: 확장성+신뢰성 / 성능 오버헤드
Modules
- Many modern operating systems implement loadable kernel modules
- Uses object-oriented approach
- Each core component is separate
- Each talks to the others over known interfaces
- Each is loadable as needed within the kernel
- Linux, Solaris, etc
- Overall, similar to layers but with more flexible
- Similar to microkernel but no messaging communication
- 현대의 많은 운영 체제들은 로드 가능한 커널 모듈을 구현한다.
- 객체 지향 접근 방식 사용
- 각 핵심 구성 요소는 별개이다.
- 각각은 알려진 인터페이스를 통해 다른 사용자와 대화한다.
- 각각은 커널 내에서 필요에 따라 로드할 수 있다.
- Linux, Solaris 등
- 전체적으로 레이어와 비슷하지만 더 유연하다.
- 마이크로커널과 유사하지만 메시징 통신이 없다.
load 가능한 커널 모듈. 객체 지향.
유연.
통신이 없음.
Hybrid Systems
- Most modern operating systems are actually not one pure model
- Hybrid combines multiple approaches from different systems to address performance, security, usability needs
- Linux and Solaris kernels are monolithic by having the OS in a single kernel address space
- Plus modular for dynamic loading of functionality
- Windows mostly monolithic, plus microkernel for different subsystem personalities
- Apple Mac OS X hybrid, layered, Aqua UI plus Cocoa programming environment
- Below is kernel consisting of Mach microkernel and BSD Unix parts, plus I/O kit and dynamically loadable modules (called kernel extensions)
- 대부분의 최신 운영 체제는 실제로 하나의 순수한 모델이 아니다.
- 하이브리드는 서로 다른 시스템의 여러 접근 방식을 결합하여 성능, 보안, 사용성 요구사항을 해결한다.
- 리눅스와 Solaris 커널은 단일 커널 주소 공간에 OS를 가짐으로써 단일화된다.
- Windows는 대부분 단일 시스템이며 다양한 하위 시스템 개인 데이터를 위한 마이크로커널도 제공한다.
- Apple Mac OS X 하이브리드, 레이어드, 아쿠아 UI 및 코코아 프로그래밍 환경
- 아래 커널은 Mach 마이크로커널과 BSD 유닉스 부품, 그리고 입출력 키트와 동적으로 로드 가능한 모듈(커널 확장이라고 함)로 구성되어 있다.
운영체제는 하나의 순수한 모델이 아니다.
iOS
- Apple mobile OS for iPhone, iPad
- Structured on Mac OS X, added functionality
- Cocoa Touch
- Framework for developing mobile apps
- Media services
- Layer for graphics, audio, video
- Core services
- Provides cloud computing, databases
- Core operating system, based on Mac OS X kernel
- 아이폰, 아이패드용 애플 모바일 OS
- Mac OS X에 구축되어 기능 추가
- 코코아 터치
- 미디어 서비스
- 핵심 서비스
- 코어 운영 체제, Mac OS X 커널 기반
Mac OS X 커널 기반
Android
- Developed by Open Handset Alliance (mostly Google)
- Based on Linux kernel but modified
- Provide process, memory, device-driver management
- Add power management
- Runtime environment includes core set of libraries and Android RunTimemachine (ART)
- Apps developed in Java API + Android API
- Java class file -> Java byte code via Java compile -> (on-device) Native code via AOT compile
- Libraries include frameworks for web browser (webkit), database (SQLite), multimedia, smaller libc
- 오픈 핸드셋 얼라이언스(주로 구글)에서 개발
- Linux 커널 기반이지만 수정됨
- 프로세스, 메모리, 장치 드라이버 관리 제공
- 전원 관리 추가
- 런타임 환경에는 라이브러리의 핵심 세트와 Android RunTime 머신(ART)이 포함된다.
- Java API + Android API로 개발된 앱
- 자바 클래스 파일 -> 자바 컴파일을 통한 자바 바이트 코드 -> (기기 내) AOT 컴파일을 통한 네이티브 코드
- 라이브러리에는 웹 브라우저(웹킷), 데이터베이스(SQLite), 멀티미디어, 소규모 libc를 위한 프레임워크가 포함된다.
linux kernel 기반이지만 수정됨
Android Architecture
Linux Overview
Why Linux
- Learning Linux means improving the ability to develop/test applications using various commands and tools provided by Linux
- vim, emacs, make, gcc, gdb, etc.
- Why should we learn Linux?
- Most devices used in the IT industry are based on the Linux OS
- E.g., Android for mobile, cloud server, network equipment, GENIVI for vehicle control and infotainment, Yoctoproject for IoTdevices, etc.
- Many open source programs run in the Linux-based environments.
- 리눅스를 배우는 것은 리눅스에서 제공하는 다양한 명령과 도구를 사용하여 응용 프로그램을 개발/테스트하는 능력을 향상시키는 것을 의미한다.
- vim, emacs, make, gcc, gdb 등.
- 왜 우리는 리눅스를 배워야 할까?
- IT 업계에서 사용되는 대부분의 장치는 Linux OS를 기반으로 한다.
- 예를 들어 모바일용 Android, 클라우드 서버, 네트워크 장비, 차량 제어 및 인포테인먼트용 GENIVI, IoT 장치용 Yocto 프로젝트 등이 있다.
- 많은 오픈 소스 프로그램들은 리눅스 기반 환경에서 실행된다.
Why Linux Kernel
- Learning Linux Kernel means understanding the detailed operation of the kernel and improving the ability to modify several parts of the kernel
- Why should we learn Linux kernel?
- You need to know detailed knowledge of the kernel to be an advanced programmer
- Code optimization, debugging skills, etc.
- It is essentialif you want to be an embedded system developer dealing with low-level hardware interfaces (device drivers)
- Linux kernel is an open-source based OS
- 리눅스 커널을 배우는 것은 커널의 세부 작업을 이해하고 커널의 여러 부분을 수정하는 능력을 향상시키는 것을 의미한다.
- 왜 우리는 리눅스 커널을 배워야 하는가?
- 고급 프로그래머가 되려면 커널에 대한 자세한 지식을 알아야 한다.
- 코드 최적화, 디버깅 기술 등
- 낮은 수준의 하드웨어 인터페이스(장치 드라이버)를 다루는 임베디드 시스템 개발자가 되고 싶다면 필수적이다.
- 리눅스 커널은 오픈 소스 기반 OS이다.
The Birth of Linux
- Linux is a modern, free operating system based on UNIX standards
- First developed as a small but self-contained kernel (version 0.01) in 1991 by Linus Torvalds, with the major design goal of UNIX compatibility, released as open source
- Linux Kernel 1.0 (March 1994) ~ 5.0 (March 2019)
- Linux는 UNIX 표준을 기반으로 하는 최신의 무료 운영 체제이다.
- 1991년 리누스 토르발스가 오픈 소스로 출시한 유닉스 호환성의 주요 설계 목표를 가진 작지만 자체 포함 커널(버전 0.01)로 처음 개발되었다.
- 리눅스 커널 1.0(1994년 3월) ~ 5.0(2019년 3월)
https://en.wikipedia.org/wiki/Linus_Torvalds
LoC per Linux Kernel Version
The Linux System
- Linux uses many tools developed as part of Berkeley’s BSD OS, MIT’s X Window System, and the Free Software Foundation's GNU project
- The Linux system is maintained by a loose network of developers collaborating over the Internet (the Linux community)
- The main system libraries were started by the GNU project, with improvements provided by the Linux community
- 리눅스는 버클리의 BSD OS, MIT의 X 윈도 시스템, 자유 소프트웨어 재단의 GNU 프로젝트의 일부로 개발된 많은 도구들을 사용한다.
- 리눅스 시스템은 인터넷(리눅스 커뮤니티)을 통해 협업하는 느슨한 개발자 네트워크에 의해 유지된다.
- 주요 시스템 라이브러리는 GNU 프로젝트에 의해 시작되었으며 리눅스 커뮤니티에 의해 개선되었다.
- File System Hierarchy Standard document maintained by the Linux community to ensure compatibility across various system components
- Specifies overall layout of a standard Linux file system, determines under which directory names configuration files, libraries, system binaries, and run-time data files should be stored
- 다양한 시스템 구성요소 간의 호환성을 보장하기 위해 Linux 커뮤니티에서 유지관리하는 파일 시스템 계층 표준 문서
- 표준 Linux 파일 시스템의 전체 레이아웃을 지정하고, 구성 파일, 라이브러리, 시스템 이진 파일 및 런타임 데이터 파일을 저장할 디렉터리 이름을 결정한다.
Design Principles of Linux
- A multiuser, multitasking system with a full set of UNIX-compatible tools
- Its file system adheres to traditional UNIX semantics, and it fully implements the standard UNIX networking model
- Main design goals are speed, efficiency, and standardization
- Linux is designed to be compliant with the relevant POSIX documents
- The Portable Operating System Interface (POSIX) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems
- UNIX 호환 도구의 전체 세트가 포함된 다중 사용자 멀티태스킹 시스템
- 파일 시스템은 전통적인 UNIX 의미론을 고수하며 표준 UNIX 네트워킹 모델을 완전히 구현한다.
- 주요 설계 목표는 속도, 효율성 및 표준화이다.
- Linux는 관련 POSIX 문서와 호환되도록 설계되었다.
- 휴대용 운영 체제 인터페이스(, POSIX)는 운영 체제 간의 호환성을 유지하기 위해 IEEE 컴퓨터 학회에서 지정한 표준 계열이다.
Linux OS Structure
- It is based on UNIX and is structured similarly, i.e., Monolithic rather than Microkernel
- Placing all of the functionality of the kernel into a single, static binary file that runs in a single address space
- Distinct performance advantages in terms of speed and efficiency
- Linux also has a modular design that allows the kernel to be modified during run time
- Using loadable kernel modules (LKMs), primarily for supporting device drivers and file systems
- LKMs can be “inserted OR removed” into/from the kernel as the system is started or during run time, such as when a USB device is plugged into/out a running machine
- 유닉스를 기반으로 하며 마이크로커널이 아닌 모놀리식과 유사하게 구조화되어 있다.
- 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 배치
- 속도와 효율성 측면에서 차별화된 성능 이점
- 리눅스는 또한 런타임 동안 커널을 수정할 수 있는 모듈식 설계를 가지고 있다.
- Loadable Kernel Module(LKM)을 사용하여 주로 장치 드라이버 및 파일 시스템 지원
- LKM은 시스템이 시작될 때 또는 USB 장치가 실행 중인 시스템에 연결되거나 실행 중인 시스템에 연결될 때 커널에 "삽입 또는 제거"될 수 있다.
Monolithic과 유사하게 구조화 - 단일 정적 이진 파일, 성능 이점
모듈식 설계 - LKM, 삽입 또는 제거
- Like most UNIX implementations, Linux is composed of three main bodies of code; Kernel, System libraries and System utilities
- 대부분의 유닉스 구현체와 마찬가지로 리눅스는 커널, 시스템 라이브러리, 시스템 유틸리티의 세 가지 주요 코드로 구성되어 있다.
Components of the Linux System
- Kernel
- Responsible for maintaining all the important abstractions of the OS
- All the kernel code executes in the processor’s privileged mode(= kernel mode) with full access to all the physical resources of the computer
- All kernel code and data structures are kept in the same single address space
- 커널
- OS의 모든 중요한 추상화를 관리할 책임이 있다.
- 모든 커널 코드는 컴퓨터의 모든 물리적 리소스에 대한 완전한 액세스를 통해 프로세서의 권한 모드(= 커널 모드)에서 실행된다.
- 모든 커널 코드 및 데이터 구조는 동일한 단일 주소 공간에 유지된다.
- System Libraries
- Define a standard set of functions through which applications interact with the kernel, and which implement much of the operating-system functionality that does not need the full privileges of kernel code
- The most important system library is the C library, known as libc
- 시스템 라이브러리
- 응용 프로그램이 커널과 상호 작용하는 표준 함수 집합을 정의하고 커널 코드의 전체 권한이 필요하지 않은 운영 체제 기능의 대부분을 구현한다.
- 가장 중요한 시스템 라이브러리는 libc로 알려진 C 라이브러리이다.
- System Utilities (= System Services)
- Programs that perform individual, specialized management tasks
- Some are invoked just once to initialize and configure some aspect of the system.
- Others (known as daemons in UNIX terminology) run permanently, handling such tasks as responding to incoming network connections, accepting logon requests from terminals, and updating log files
- 시스템 유틸리티(= 시스템 서비스)
- 개별적이고 전문적인 관리 태스크를 수행하는 프로그램
- 일부는 시스템의 일부 측면을 초기화하고 구성하기 위해 한 번만 호출된다.
- UNIX 용어로 daemons라고 하는 다른 프로그램은 영구적으로 실행되어 들어오는 네트워크 연결에 대한 응답, 터미널의 로그온 요청 수락, 로그 파일 업데이트 등의 작업을 처리한다.
Kernel : 추상화 관리, kernel mode, 단일 주소 공간
System Libraries: 표준 함수 집합/ 운영체제 기능 대부분 구현, libc 라이브러리
System Utilities : 관리 태스크 수행, 일부는 초기화 위해 한 번만 호출, daemons 프로그램은 네트워크 연결 응답, 로그 요청 수락, 로그 파일 업데이트 작업 처리
Kernel Modules
- Sections of kernel code that can be compiled, loaded, and unloaded independent of the rest of the kernel
- A kernel module may typically implement a device driver, a file system, or a networking protocol
- The module interface allows third parties to write and distribute, on their own terms, device drivers or file systems that could not be distributed under the GPL
- Kernel modules allow a Linux system to be set up with a standard, minimal kernel, without any extra device drivers built in
- 나머지 커널과 독립적으로 컴파일, 로드 및 언로드할 수 있는 커널 코드 섹션
- 커널 모듈은 일반적으로 장치 드라이버, 파일 시스템 또는 네트워킹 프로토콜을 구현할 수 있다.
- 모듈 인터페이스는 제3자가 GPL에 따라 배포할 수 없었던 장치 드라이버 또는 파일 시스템을 그들 자신의 조건으로 작성하고 배포할 수 있도록 한다.
- 커널 모듈은 리눅스 시스템이 별도의 장치 드라이버 없이 최소한의 표준 커널로 설정될 수 있도록 한다.
커널 모듈
다른 커널과 독립적인 코드 섹션
장치 드라이버, 파일 시스템, 네트워크 프로토콜 구현
모듈 인터페이스는 그들 조건으로 작성하고 배포, 제3자 GPL에 따라 불가능
커널 모듈은 리눅스 시스템이 최소한의 표준 커널로 설정되게 함
Example
- You can make a custom kernel module easily
- Make a source file & a build file (Makefile)
- Compile the source file using the command make
- You can acquire the module file (.ko)
- And load the module using the command insmod
- You can remove the module using the command rmmod
- 사용자 지정 커널 모듈을 쉽게 만들 수 있다.
- 소스 파일 및 빌드 파일 만들기(파일 만들기)
- make 명령을 사용하여 소스 파일 컴파일
- 모듈 파일(.ko)을 획득할 수 있다.
- 그리고 insmod 명령을 사용하여 모듈을 로드한다.
- rmmod 명령을 사용하여 모듈을 제거할 수 있다.
Linux System Architecture
5 Core Functions of Linux
- Process management
- Memory management
- File System management
- I/O (Device Driver) management
- Network management
- 공정관리
- 메모리 관리
- 파일 시스템 관리
- I/O(장치 드라이버) 관리
- 네트워크 관리