일기 대신 코드 슬쩍

[운영체제] OS 구조 본문

OS

[운영체제] OS 구조

코코자 2024. 4. 1. 13:31

이번에는 뭘 다룰거냐면,,!!!

  • 운영체제가 제공하는 다양한 service
  • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
  • OS를 구성하는 다양한 방법
  • OS 설치, customization, booting
  • OS 성능 모니터링 방법

에 대해서 배워보겠다.


2.1 Operating-System Services

굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!

Service

서비스들을 다 살펴보자

간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는

  • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
  • user도 제공되는 서비스를 인지하고 있는

그런 서비스라고 할 수 있다.

그와 반면해 오른쪽의 resource allocation, accounting, protection and security는

  • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
  • user가 인지하지 못하는

그런 서비스라고 할 수 있다.

  • Program execution: user는 program을 실행할 수 있음
  • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
  • File-system manipulation: file 조작, read/write/create/delete
  • Communications: process사이의 통신, IPC도 OS의 service를 받음
    • IPC(Inter-Process Communication): shared memory, message passing
  • Error detection: error 탐지
  • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
  • Logging: 기록 추적
  • Protection and Security: authorization & Authentication
    • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
    • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

2.2 User and Operating-System Interface

사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.

Command Interpreters(CUI)

  • 유저가 지정한 방식으로 읽어들이고 동작을 실행
  • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함

Graphical User Interface(GUI)

  • Windows, MacOS..

Touch-Screen Interface

  • GUI의 일종이라고 볼 수 있음
  • touch하고, gesture남기고,,

2.3 System Calls

System Calls

System Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.

특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.

  • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
  • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!

[Example: file copy]

file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!

⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!

Application Programming Interface(API)

보통의 system call은 이 API를 통해 이뤄진다.

  • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
  • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
  • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.

Run-time environment (RTE)

  • application을 실행하는데 필요한 software 집합
  • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
  • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
  • parameter를 넘겨주는 방법에는
    • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
    • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)

[Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@

Type of System Calls

  • process control, file management, device management, information maintenance, communications, protection

2.5 Linkers and Loaders

  • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
  • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
  • Loader: 생성된 binary file을 memory에 로딩
  1. creates a new process: fork()
  2. invokes the loader: exec()
  • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
  • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
    • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
    • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
    • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
  • Object files and executable files
    • UNIX and Linux: ELF(Executable and Linkable Format)
    • macOS: Mach-O format
    • Windows: PE(Portable Executable format)


2.6 Why Applications Are Operating-System Specific

2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.

그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?

  • Interpreted language (such as Python)
    • line을 하나씩 읽고, 즉시 실행하는 방식
    • 바로 읽다보니 성능저하 문제발생
    • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
  • language that includes a virtual machine containing the running application
    • RTE에 다양한 OS를 porting 해놔
    • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
    • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
  • uses a standard language or API
    • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
    • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
    • 장점: 비교적 쉽게 각 OS에 port 가능
    • 단점: 시간이 오래 걸림

 


2.8 Operating-System Structure

OS의 구조에는 어떤 것이 있는지 한 번 알아보자!

Traditioal UNIX system structure

전통적인 UNIX system 구조를 살펴보자.

맨 위에 user가 존재하고,

shells and commands를 이용하여 user가 kernel에 접속한다.

system libraries는 system call을 제공할 수 있는 라이브러리이다.

그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,

system-call interface를 이용해 user와 kernel을 연결시킨다.

맨 밑은 Hardware 부분이다.

Monolithic Structure

 

모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.

위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.

[Pros & Cons]

system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.

[Summary]

Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.

Layered Approach

여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.

각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.

최상위 layer에는 user interface가 있고 (layer N)

그 사이에는 kernel이다 (layer 1~N)

최하위 layer에는 hardware가 있다 (layer 0)

[Pros & Cons]

layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,

각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.

Microkernels

kernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.

별도의 address space가 원래 OS가 제공하던 기능을 수행한다.

⇒ small kernel + user level programs in separate address spaces

 

[Pros & Cons]

OS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!

또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.

Modules

OS structure중 가장 진보된 방식이라고 할 수 있다!

LKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.

(Modules 가 그렇다는 건가..? 잘 모르겠다)

Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.

⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.

[Layered system과의 유사점과 차이점]

각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,

layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!

[Microkernel approach과의 유사점과 차이점]

Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만

module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!

정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.

[Example: Linux]

LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.

Hybrid Systems

성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.

Linux는 monolitic + modular

Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules


2.9 Building and Booting an Operating System

OS를 부팅하는 과정에 대해 알아보자.

  1. BIOS/UEFI
  • 초기화 하고, 점검하는 단계이다.
  • BIOS(Basic Input Output Software)
  1. Bootstrap program or boot loader locates the kernel
  • kernel이 어디있는지 찾아본다.
  • windows→ boot manager, Linux → GRUB
  1. Kernel이 memory에 로딩되고 시작한다
  • 여기서부터 OS가 동작한다고 할 수 있다.
  1. Kernel initializes hardware
  • Kernel이 다시 Hardware를 초기화한다.
  1. Root file system is mounted
  • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
    • 운영체제가 제공하는 다양한 service
    • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
    • OS를 구성하는 다양한 방법
    • OS 설치, customization, booting
    • OS 성능 모니터링 방법
    에 대해서 배워보겠다.
    2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
    • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
    • user도 제공되는 서비스를 인지하고 있는
    그런 서비스라고 할 수 있다.
    • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
    • user가 인지하지 못하는
    그런 서비스라고 할 수 있다.
    • Program execution: user는 program을 실행할 수 있음
    • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
    • File-system manipulation: file 조작, read/write/create/delete
    • Communications: process사이의 통신, IPC도 OS의 service를 받음
      • IPC(Inter-Process Communication): shared memory, message passing
    • Error detection: error 탐지
    • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
    • Logging: 기록 추적
    • Protection and Security: authorization & Authentication
      • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
      • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

    2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
    • 유저가 지정한 방식으로 읽어들이고 동작을 실행
    • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
    Graphical User Interface(GUI)
    • Windows, MacOS..
    Touch-Screen Interface
    • GUI의 일종이라고 볼 수 있음
    • touch하고, gesture남기고,,

    2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
    • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
    • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
    [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
    • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
    • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
    • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
    Run-time environment (RTE)
    • application을 실행하는데 필요한 software 집합
    • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
    • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
    • parameter를 넘겨주는 방법에는
      • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
      • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
    • process control, file management, device management, information maintenance, communications, protection

    2.5 Linkers and Loaders
    • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
    • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
    • Loader: 생성된 binary file을 memory에 로딩
    1. creates a new process: fork()
    2. invokes the loader: exec()
    • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
    • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
      • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
      • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
      • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
    • Object files and executable files
      • UNIX and Linux: ELF(Executable and Linkable Format)
      • macOS: Mach-O format
      • Windows: PE(Portable Executable format)

    2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
    • Interpreted language (such as Python)
      • line을 하나씩 읽고, 즉시 실행하는 방식
      • 바로 읽다보니 성능저하 문제발생
      • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
    • language that includes a virtual machine containing the running application
      • RTE에 다양한 OS를 porting 해놔
      • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
      • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
    • uses a standard language or API
      • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
      • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
      • 장점: 비교적 쉽게 각 OS에 port 가능
      • 단점: 시간이 오래 걸림

    2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
    2.9 Building and Booting an Operating System
    1. BIOS/UEFI
    • 초기화 하고, 점검하는 단계이다.
    • BIOS(Basic Input Output Software)
    1. Bootstrap program or boot loader locates the kernel
    • kernel이 어디있는지 찾아본다.
    • windows→ boot manager, Linux → GRUB
    1. Kernel이 memory에 로딩되고 시작한다
    • 여기서부터 OS가 동작한다고 할 수 있다.
    1. Kernel initializes hardware
    • Kernel이 다시 Hardware를 초기화한다.
    1. Root file system is mounted
    • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
      • 운영체제가 제공하는 다양한 service
      • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
      • OS를 구성하는 다양한 방법
      • OS 설치, customization, booting
      • OS 성능 모니터링 방법
      에 대해서 배워보겠다.
      2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
      • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
      • user도 제공되는 서비스를 인지하고 있는
      그런 서비스라고 할 수 있다.
      • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
      • user가 인지하지 못하는
      그런 서비스라고 할 수 있다.
      • Program execution: user는 program을 실행할 수 있음
      • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
      • File-system manipulation: file 조작, read/write/create/delete
      • Communications: process사이의 통신, IPC도 OS의 service를 받음
        • IPC(Inter-Process Communication): shared memory, message passing
      • Error detection: error 탐지
      • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
      • Logging: 기록 추적
      • Protection and Security: authorization & Authentication
        • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
        • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

      2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
      • 유저가 지정한 방식으로 읽어들이고 동작을 실행
      • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
      Graphical User Interface(GUI)
      • Windows, MacOS..
      Touch-Screen Interface
      • GUI의 일종이라고 볼 수 있음
      • touch하고, gesture남기고,,

      2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
      • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
      • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
      [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
      • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
      • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
      • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
      Run-time environment (RTE)
      • application을 실행하는데 필요한 software 집합
      • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
      • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
      • parameter를 넘겨주는 방법에는
        • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
        • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
      • process control, file management, device management, information maintenance, communications, protection

      2.5 Linkers and Loaders
      • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
      • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
      • Loader: 생성된 binary file을 memory에 로딩
      1. creates a new process: fork()
      2. invokes the loader: exec()
      • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
      • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
        • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
        • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
        • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
      • Object files and executable files
        • UNIX and Linux: ELF(Executable and Linkable Format)
        • macOS: Mach-O format
        • Windows: PE(Portable Executable format)

      2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
      • Interpreted language (such as Python)
        • line을 하나씩 읽고, 즉시 실행하는 방식
        • 바로 읽다보니 성능저하 문제발생
        • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
      • language that includes a virtual machine containing the running application
        • RTE에 다양한 OS를 porting 해놔
        • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
        • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
      • uses a standard language or API
        • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
        • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
        • 장점: 비교적 쉽게 각 OS에 port 가능
        • 단점: 시간이 오래 걸림

      2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
      2.9 Building and Booting an Operating System
      1. BIOS/UEFI
      • 초기화 하고, 점검하는 단계이다.
      • BIOS(Basic Input Output Software)
      1. Bootstrap program or boot loader locates the kernel
      • kernel이 어디있는지 찾아본다.
      • windows→ boot manager, Linux → GRUB
      1. Kernel이 memory에 로딩되고 시작한다
      • 여기서부터 OS가 동작한다고 할 수 있다.
      1. Kernel initializes hardware
      • Kernel이 다시 Hardware를 초기화한다.
      1. Root file system is mounted
      • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
        • 운영체제가 제공하는 다양한 service
        • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
        • OS를 구성하는 다양한 방법
        • OS 설치, customization, booting
        • OS 성능 모니터링 방법
        에 대해서 배워보겠다.
        2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
        • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
        • user도 제공되는 서비스를 인지하고 있는
        그런 서비스라고 할 수 있다.
        • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
        • user가 인지하지 못하는
        그런 서비스라고 할 수 있다.
        • Program execution: user는 program을 실행할 수 있음
        • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
        • File-system manipulation: file 조작, read/write/create/delete
        • Communications: process사이의 통신, IPC도 OS의 service를 받음
          • IPC(Inter-Process Communication): shared memory, message passing
        • Error detection: error 탐지
        • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
        • Logging: 기록 추적
        • Protection and Security: authorization & Authentication
          • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
          • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

        2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
        • 유저가 지정한 방식으로 읽어들이고 동작을 실행
        • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
        Graphical User Interface(GUI)
        • Windows, MacOS..
        Touch-Screen Interface
        • GUI의 일종이라고 볼 수 있음
        • touch하고, gesture남기고,,

        2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
        • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
        • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
        [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
        • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
        • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
        • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
        Run-time environment (RTE)
        • application을 실행하는데 필요한 software 집합
        • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
        • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
        • parameter를 넘겨주는 방법에는
          • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
          • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
        • process control, file management, device management, information maintenance, communications, protection

        2.5 Linkers and Loaders
        • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
        • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
        • Loader: 생성된 binary file을 memory에 로딩
        1. creates a new process: fork()
        2. invokes the loader: exec()
        • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
        • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
          • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
          • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
          • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
        • Object files and executable files
          • UNIX and Linux: ELF(Executable and Linkable Format)
          • macOS: Mach-O format
          • Windows: PE(Portable Executable format)

        2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
        • Interpreted language (such as Python)
          • line을 하나씩 읽고, 즉시 실행하는 방식
          • 바로 읽다보니 성능저하 문제발생
          • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
        • language that includes a virtual machine containing the running application
          • RTE에 다양한 OS를 porting 해놔
          • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
          • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
        • uses a standard language or API
          • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
          • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
          • 장점: 비교적 쉽게 각 OS에 port 가능
          • 단점: 시간이 오래 걸림

        2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
        2.9 Building and Booting an Operating System
        1. BIOS/UEFI
        • 초기화 하고, 점검하는 단계이다.
        • BIOS(Basic Input Output Software)
        1. Bootstrap program or boot loader locates the kernel
        • kernel이 어디있는지 찾아본다.
        • windows→ boot manager, Linux → GRUB
        1. Kernel이 memory에 로딩되고 시작한다
        • 여기서부터 OS가 동작한다고 할 수 있다.
        1. Kernel initializes hardware
        • Kernel이 다시 Hardware를 초기화한다.
        1. Root file system is mounted
        • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
          • 운영체제가 제공하는 다양한 service
          • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
          • OS를 구성하는 다양한 방법
          • OS 설치, customization, booting
          • OS 성능 모니터링 방법
          에 대해서 배워보겠다.
          2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
          • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
          • user도 제공되는 서비스를 인지하고 있는
          그런 서비스라고 할 수 있다.
          • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
          • user가 인지하지 못하는
          그런 서비스라고 할 수 있다.
          • Program execution: user는 program을 실행할 수 있음
          • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
          • File-system manipulation: file 조작, read/write/create/delete
          • Communications: process사이의 통신, IPC도 OS의 service를 받음
            • IPC(Inter-Process Communication): shared memory, message passing
          • Error detection: error 탐지
          • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
          • Logging: 기록 추적
          • Protection and Security: authorization & Authentication
            • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
            • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

          2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
          • 유저가 지정한 방식으로 읽어들이고 동작을 실행
          • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
          Graphical User Interface(GUI)
          • Windows, MacOS..
          Touch-Screen Interface
          • GUI의 일종이라고 볼 수 있음
          • touch하고, gesture남기고,,

          2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
          • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
          • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
          [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
          • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
          • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
          • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
          Run-time environment (RTE)
          • application을 실행하는데 필요한 software 집합
          • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
          • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
          • parameter를 넘겨주는 방법에는
            • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
            • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
          • process control, file management, device management, information maintenance, communications, protection

          2.5 Linkers and Loaders
          • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
          • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
          • Loader: 생성된 binary file을 memory에 로딩
          1. creates a new process: fork()
          2. invokes the loader: exec()
          • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
          • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
            • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
            • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
            • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
          • Object files and executable files
            • UNIX and Linux: ELF(Executable and Linkable Format)
            • macOS: Mach-O format
            • Windows: PE(Portable Executable format)

          2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
          • Interpreted language (such as Python)
            • line을 하나씩 읽고, 즉시 실행하는 방식
            • 바로 읽다보니 성능저하 문제발생
            • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
          • language that includes a virtual machine containing the running application
            • RTE에 다양한 OS를 porting 해놔
            • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
            • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
          • uses a standard language or API
            • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
            • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
            • 장점: 비교적 쉽게 각 OS에 port 가능
            • 단점: 시간이 오래 걸림

          2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
          2.9 Building and Booting an Operating System
          1. BIOS/UEFI
          • 초기화 하고, 점검하는 단계이다.
          • BIOS(Basic Input Output Software)
          1. Bootstrap program or boot loader locates the kernel
          • kernel이 어디있는지 찾아본다.
          • windows→ boot manager, Linux → GRUB
          1. Kernel이 memory에 로딩되고 시작한다
          • 여기서부터 OS가 동작한다고 할 수 있다.
          1. Kernel initializes hardware
          • Kernel이 다시 Hardware를 초기화한다.
          1. Root file system is mounted
          • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
            • 운영체제가 제공하는 다양한 service
            • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
            • OS를 구성하는 다양한 방법
            • OS 설치, customization, booting
            • OS 성능 모니터링 방법
            에 대해서 배워보겠다.
            2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
            • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
            • user도 제공되는 서비스를 인지하고 있는
            그런 서비스라고 할 수 있다.
            • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
            • user가 인지하지 못하는
            그런 서비스라고 할 수 있다.
            • Program execution: user는 program을 실행할 수 있음
            • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
            • File-system manipulation: file 조작, read/write/create/delete
            • Communications: process사이의 통신, IPC도 OS의 service를 받음
              • IPC(Inter-Process Communication): shared memory, message passing
            • Error detection: error 탐지
            • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
            • Logging: 기록 추적
            • Protection and Security: authorization & Authentication
              • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
              • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

            2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
            • 유저가 지정한 방식으로 읽어들이고 동작을 실행
            • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
            Graphical User Interface(GUI)
            • Windows, MacOS..
            Touch-Screen Interface
            • GUI의 일종이라고 볼 수 있음
            • touch하고, gesture남기고,,

            2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
            • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
            • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
            [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
            • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
            • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
            • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
            Run-time environment (RTE)
            • application을 실행하는데 필요한 software 집합
            • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
            • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
            • parameter를 넘겨주는 방법에는
              • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
              • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
            • process control, file management, device management, information maintenance, communications, protection

            2.5 Linkers and Loaders
            • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
            • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
            • Loader: 생성된 binary file을 memory에 로딩
            1. creates a new process: fork()
            2. invokes the loader: exec()
            • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
            • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
              • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
              • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
              • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
            • Object files and executable files
              • UNIX and Linux: ELF(Executable and Linkable Format)
              • macOS: Mach-O format
              • Windows: PE(Portable Executable format)

            2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
            • Interpreted language (such as Python)
              • line을 하나씩 읽고, 즉시 실행하는 방식
              • 바로 읽다보니 성능저하 문제발생
              • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
            • language that includes a virtual machine containing the running application
              • RTE에 다양한 OS를 porting 해놔
              • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
              • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
            • uses a standard language or API
              • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
              • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
              • 장점: 비교적 쉽게 각 OS에 port 가능
              • 단점: 시간이 오래 걸림

            2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
            2.9 Building and Booting an Operating System
            1. BIOS/UEFI
            • 초기화 하고, 점검하는 단계이다.
            • BIOS(Basic Input Output Software)
            1. Bootstrap program or boot loader locates the kernel
            • kernel이 어디있는지 찾아본다.
            • windows→ boot manager, Linux → GRUB
            1. Kernel이 memory에 로딩되고 시작한다
            • 여기서부터 OS가 동작한다고 할 수 있다.
            1. Kernel initializes hardware
            • Kernel이 다시 Hardware를 초기화한다.
            1. Root file system is mounted
            • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
              • 운영체제가 제공하는 다양한 service
              • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
              • OS를 구성하는 다양한 방법
              • OS 설치, customization, booting
              • OS 성능 모니터링 방법
              에 대해서 배워보겠다.
              2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
              • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
              • user도 제공되는 서비스를 인지하고 있는
              그런 서비스라고 할 수 있다.
              • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
              • user가 인지하지 못하는
              그런 서비스라고 할 수 있다.
              • Program execution: user는 program을 실행할 수 있음
              • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
              • File-system manipulation: file 조작, read/write/create/delete
              • Communications: process사이의 통신, IPC도 OS의 service를 받음
                • IPC(Inter-Process Communication): shared memory, message passing
              • Error detection: error 탐지
              • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
              • Logging: 기록 추적
              • Protection and Security: authorization & Authentication
                • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
                • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

              2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
              • 유저가 지정한 방식으로 읽어들이고 동작을 실행
              • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
              Graphical User Interface(GUI)
              • Windows, MacOS..
              Touch-Screen Interface
              • GUI의 일종이라고 볼 수 있음
              • touch하고, gesture남기고,,

              2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
              • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
              • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
              [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
              • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
              • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
              • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
              Run-time environment (RTE)
              • application을 실행하는데 필요한 software 집합
              • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
              • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
              • parameter를 넘겨주는 방법에는
                • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
                • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
              • process control, file management, device management, information maintenance, communications, protection

              2.5 Linkers and Loaders
              • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
              • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
              • Loader: 생성된 binary file을 memory에 로딩
              1. creates a new process: fork()
              2. invokes the loader: exec()
              • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
              • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
                • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
                • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
                • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
              • Object files and executable files
                • UNIX and Linux: ELF(Executable and Linkable Format)
                • macOS: Mach-O format
                • Windows: PE(Portable Executable format)

              2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
              • Interpreted language (such as Python)
                • line을 하나씩 읽고, 즉시 실행하는 방식
                • 바로 읽다보니 성능저하 문제발생
                • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
              • language that includes a virtual machine containing the running application
                • RTE에 다양한 OS를 porting 해놔
                • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
                • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
              • uses a standard language or API
                • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
                • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
                • 장점: 비교적 쉽게 각 OS에 port 가능
                • 단점: 시간이 오래 걸림

              2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
              2.9 Building and Booting an Operating System
              1. BIOS/UEFI
              • 초기화 하고, 점검하는 단계이다.
              • BIOS(Basic Input Output Software)
              1. Bootstrap program or boot loader locates the kernel
              • kernel이 어디있는지 찾아본다.
              • windows→ boot manager, Linux → GRUB
              1. Kernel이 memory에 로딩되고 시작한다
              • 여기서부터 OS가 동작한다고 할 수 있다.
              1. Kernel initializes hardware
              • Kernel이 다시 Hardware를 초기화한다.
              1. Root file system is mounted
              • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
                • 운영체제가 제공하는 다양한 service
                • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
                • OS를 구성하는 다양한 방법
                • OS 설치, customization, booting
                • OS 성능 모니터링 방법
                에 대해서 배워보겠다.
                2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
                • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
                • user도 제공되는 서비스를 인지하고 있는
                그런 서비스라고 할 수 있다.
                • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
                • user가 인지하지 못하는
                그런 서비스라고 할 수 있다.
                • Program execution: user는 program을 실행할 수 있음
                • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
                • File-system manipulation: file 조작, read/write/create/delete
                • Communications: process사이의 통신, IPC도 OS의 service를 받음
                  • IPC(Inter-Process Communication): shared memory, message passing
                • Error detection: error 탐지
                • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
                • Logging: 기록 추적
                • Protection and Security: authorization & Authentication
                  • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
                  • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

                2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
                • 유저가 지정한 방식으로 읽어들이고 동작을 실행
                • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
                Graphical User Interface(GUI)
                • Windows, MacOS..
                Touch-Screen Interface
                • GUI의 일종이라고 볼 수 있음
                • touch하고, gesture남기고,,

                2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
                • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
                • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
                [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
                • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
                • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
                • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
                Run-time environment (RTE)
                • application을 실행하는데 필요한 software 집합
                • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
                • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
                • parameter를 넘겨주는 방법에는
                  • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
                  • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
                • process control, file management, device management, information maintenance, communications, protection

                2.5 Linkers and Loaders
                • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
                • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
                • Loader: 생성된 binary file을 memory에 로딩
                1. creates a new process: fork()
                2. invokes the loader: exec()
                • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
                • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
                  • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
                  • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
                  • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
                • Object files and executable files
                  • UNIX and Linux: ELF(Executable and Linkable Format)
                  • macOS: Mach-O format
                  • Windows: PE(Portable Executable format)

                2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
                • Interpreted language (such as Python)
                  • line을 하나씩 읽고, 즉시 실행하는 방식
                  • 바로 읽다보니 성능저하 문제발생
                  • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
                • language that includes a virtual machine containing the running application
                  • RTE에 다양한 OS를 porting 해놔
                  • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
                  • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
                • uses a standard language or API
                  • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
                  • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
                  • 장점: 비교적 쉽게 각 OS에 port 가능
                  • 단점: 시간이 오래 걸림

                2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
                2.9 Building and Booting an Operating System
                1. BIOS/UEFI
                • 초기화 하고, 점검하는 단계이다.
                • BIOS(Basic Input Output Software)
                1. Bootstrap program or boot loader locates the kernel
                • kernel이 어디있는지 찾아본다.
                • windows→ boot manager, Linux → GRUB
                1. Kernel이 memory에 로딩되고 시작한다
                • 여기서부터 OS가 동작한다고 할 수 있다.
                1. Kernel initializes hardware
                • Kernel이 다시 Hardware를 초기화한다.
                1. Root file system is mounted
                • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
                  • 운영체제가 제공하는 다양한 service
                  • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
                  • OS를 구성하는 다양한 방법
                  • OS 설치, customization, booting
                  • OS 성능 모니터링 방법
                  에 대해서 배워보겠다.
                  2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
                  • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
                  • user도 제공되는 서비스를 인지하고 있는
                  그런 서비스라고 할 수 있다.
                  • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
                  • user가 인지하지 못하는
                  그런 서비스라고 할 수 있다.
                  • Program execution: user는 program을 실행할 수 있음
                  • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
                  • File-system manipulation: file 조작, read/write/create/delete
                  • Communications: process사이의 통신, IPC도 OS의 service를 받음
                    • IPC(Inter-Process Communication): shared memory, message passing
                  • Error detection: error 탐지
                  • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
                  • Logging: 기록 추적
                  • Protection and Security: authorization & Authentication
                    • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
                    • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

                  2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
                  • 유저가 지정한 방식으로 읽어들이고 동작을 실행
                  • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
                  Graphical User Interface(GUI)
                  • Windows, MacOS..
                  Touch-Screen Interface
                  • GUI의 일종이라고 볼 수 있음
                  • touch하고, gesture남기고,,

                  2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
                  • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
                  • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
                  [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
                  • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
                  • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
                  • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
                  Run-time environment (RTE)
                  • application을 실행하는데 필요한 software 집합
                  • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
                  • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
                  • parameter를 넘겨주는 방법에는
                    • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
                    • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
                  • process control, file management, device management, information maintenance, communications, protection

                  2.5 Linkers and Loaders
                  • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
                  • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
                  • Loader: 생성된 binary file을 memory에 로딩
                  1. creates a new process: fork()
                  2. invokes the loader: exec()
                  • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
                  • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
                    • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
                    • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
                    • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
                  • Object files and executable files
                    • UNIX and Linux: ELF(Executable and Linkable Format)
                    • macOS: Mach-O format
                    • Windows: PE(Portable Executable format)

                  2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
                  • Interpreted language (such as Python)
                    • line을 하나씩 읽고, 즉시 실행하는 방식
                    • 바로 읽다보니 성능저하 문제발생
                    • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
                  • language that includes a virtual machine containing the running application
                    • RTE에 다양한 OS를 porting 해놔
                    • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
                    • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
                  • uses a standard language or API
                    • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
                    • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
                    • 장점: 비교적 쉽게 각 OS에 port 가능
                    • 단점: 시간이 오래 걸림

                  2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
                  2.9 Building and Booting an Operating System
                  1. BIOS/UEFI
                  • 초기화 하고, 점검하는 단계이다.
                  • BIOS(Basic Input Output Software)
                  1. Bootstrap program or boot loader locates the kernel
                  • kernel이 어디있는지 찾아본다.
                  • windows→ boot manager, Linux → GRUB
                  1. Kernel이 memory에 로딩되고 시작한다
                  • 여기서부터 OS가 동작한다고 할 수 있다.
                  1. Kernel initializes hardware
                  • Kernel이 다시 Hardware를 초기화한다.
                  1. Root file system is mounted
                  • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.이번에는 뭘 다룰거냐면,,!!!
                    • 운영체제가 제공하는 다양한 service
                    • OS가 운영프로그램에 대해 제공할 수 있는 다양한 system call이 무엇이고, 또 system call이 어떤 식으로 제공되는지
                    • OS를 구성하는 다양한 방법
                    • OS 설치, customization, booting
                    • OS 성능 모니터링 방법
                    에 대해서 배워보겠다.
                    2.1 Operating-System Services굉장히 많은 정보를 담고 있는 그림이다. 하나씩 뜯어보자~!서비스들을 다 살펴보자
                    • 운영자의 직접적인 요청에 의해 OS가 서비스를 제공하고
                    • user도 제공되는 서비스를 인지하고 있는
                    그런 서비스라고 할 수 있다.
                    • user가 service를 받고있지만, 직접적인 request가 아니라 OS내부에서 자체적으로 동작하고
                    • user가 인지하지 못하는
                    그런 서비스라고 할 수 있다.
                    • Program execution: user는 program을 실행할 수 있음
                    • I/O operations: 기본적인 mouse나, touch로 입력하는 것, network를 통한 통신, display나 printer로 출력하는 것
                    • File-system manipulation: file 조작, read/write/create/delete
                    • Communications: process사이의 통신, IPC도 OS의 service를 받음
                      • IPC(Inter-Process Communication): shared memory, message passing
                    • Error detection: error 탐지
                    • Resource allocation: Computer 내의 다양한 자원을 어떻게 할당할 것인가..
                    • Logging: 기록 추적
                    • Protection and Security: authorization & Authentication
                      • authorization: 적합한 권한에 맞게 자원을 사용하고 있냐
                      • authentication: 인증을 해줌으로써 정당한 사용이냐 아니냐

                    2.2 User and Operating-System InterfaceCommand Interpreters(CUI)
                    • 유저가 지정한 방식으로 읽어들이고 동작을 실행
                    • Window의 powershell, C shell, bash, Ksh, UNIX 등이 존재함
                    Graphical User Interface(GUI)
                    • Windows, MacOS..
                    Touch-Screen Interface
                    • GUI의 일종이라고 볼 수 있음
                    • touch하고, gesture남기고,,

                    2.3 System CallsSystem Calls은 응용프로그램이 운영체제와 통신하기 위한 방법으로, 서비스를 사용하기 위한 interface라고 할 수 있다.
                    • C and C++: high-level language이고, compiler를 이용해서 processor가 인식할 수 있는 instruction 집합으로 만들어줌
                    • assembly language: hard coding이고, 시간은 오래 걸리지만 성능은 좋다는 장점!
                    [Example: file copy]보통의 system call은 이 API를 통해 이뤄진다.
                    • 어떤 parameter를 포함하고, 어떤 값을 return하는지 사용 가능한 function에 기술
                    • OS별로 다른 API를 가지는데 window → windows API, UNIX,Linux,macOS → POSIX API, Java virtual machine → Java API 이런 식이다.
                    • API를 사용하는 이유는? → increase portability할 수 있다. 즉, 다른 OS에 가서도 API를 쓰기 위함이다.
                    Run-time environment (RTE)
                    • application을 실행하는데 필요한 software 집합
                    • system call interface를 제공함으로써, system call과 연결시켜서 동작할 수 있게 함
                    • caller는 API의 조건(parameter, return type 같은거)를 만족하고, OS가 하는 일이 뭔지 이해하고 있으면 됨
                    • parameter를 넘겨주는 방법에는
                      • register를 통해서 넘기는 방법(데이터 양이 적을 때 사용함)
                      • memory block(stack 구조 사용해 push&pop)의 address를 통해서 넘기는 방법( 데이터 양이 많을 때 사용)
                    • process control, file management, device management, information maintenance, communications, protection

                    2.5 Linkers and Loaders
                    • Compiler: high level language으로 coding한 file을 compile해줌! 상대 주소를 바꿀 수 있는 특징을 가지고 있음
                    • Linker: object를 모아서 1개의 실행가능한 binary file을 만든다
                    • Loader: 생성된 binary file을 memory에 로딩
                    1. creates a new process: fork()
                    2. invokes the loader: exec()
                    • Relocation: linking(최종적으로 program이 올라갈 물리적 주소를 assign하고) and loading(최종 주소와 matching 될 수 있도록 program에서 사용된 code와 data의 실질적인 주소를 조절하는 역할)
                    • Dynamically Linked Libraries (DLLs): Windows, linker inserts relocationn information instead of libraries
                      • 이 DLLs에 대해 좀 소개해보자면, 다양하게 자주 사용되는 file은 별도로 link를 걸어놓는건데
                      • program 안에 직접 포함된 것이 아니라, 실행 중에 library에서 불러오는 것임
                      • 장점: program size를 작게함, 공유가능하기 때문에 각각의 program에서 함께 사용가능함
                    • Object files and executable files
                      • UNIX and Linux: ELF(Executable and Linkable Format)
                      • macOS: Mach-O format
                      • Windows: PE(Portable Executable format)

                    2.6 Why Applications Are Operating-System Specific그렇다면 Source Code 수준의 다양한 OS에서 함께 사용가능한 Application은 없을까?
                    • Interpreted language (such as Python)
                      • line을 하나씩 읽고, 즉시 실행하는 방식
                      • 바로 읽다보니 성능저하 문제발생
                      • ex)외국인과 direct로 대화 vs 통역사 중간에 끼고 대화, → 통역사 중간에 끼고 대화하는게 훨씬 느리잖아? 그거라고 생각하면 돼
                    • language that includes a virtual machine containing the running application
                      • RTE에 다양한 OS를 porting 해놔
                      • 그니까 Virtual Machine을 각 OS 별로 세팅 해놓으면, Application과 Virtual Machine 사이의 interface는 OS와 관련이 없게 된다.
                      • 단점: 결국에 중간에 Virtual Machine 단계를 거치는 셈이라 성능 저하 문제
                    • uses a standard language or API
                      • 모두 동일한 API를 사용하는 OS의 경우, source code는 동일하지만 바로 실행시킬 수 없다.
                      • 그래서 OS 별로 다른 compiler 이용해 다른 실행코드 만들어서 실행시킴
                      • 장점: 비교적 쉽게 각 OS에 port 가능
                      • 단점: 시간이 오래 걸림

                    2.8 Operating-System StructureTraditioal UNIX system structure전통적인 UNIX system 구조를 살펴보자.shells and commands를 이용하여 user가 kernel에 접속한다.그 밑으로 kernel은 OS에 가장 핵심적인 서비스를 제공하는 기능이라 할 수 있고,맨 밑은 Hardware 부분이다.[Pros & Cons][Summary]Layered Approach여러 단의 layer로 구성되어있고, 각 layer간 독립적이라 앞서 소개한 monolithic structure랑 반대로 loosely couple이다.최상위 layer에는 user interface가 있고 (layer N)최하위 layer에는 hardware가 있다 (layer 0)layer by layer 구조라서 construction과 debugging이 단순하다는 장점이 있지만,Microkernelskernel에서 필요하지 않은 부분을 다 제거해서 kernel에 필수적인 것만 남긴 구조이다.⇒ small kernel + user level programs in separate address spacesOS를 확장하는게 쉽다. user mode에 있는 걸 수정한다고 양옆에 영향을 미치지 않는다!ModulesLKMs(loadable kernel modules) : UNIX, Linux, MacOS와 같은 현재 가장 좋은 방법론이다.Kernel은 core components의 집합을 가지고, module을 통해 다른 service와 연결된다.[Layered system과의 유사점과 차이점]layered system은 바로 아래 module만 호출 가능했는데, Modules는 더 flexiable하다.!Primary module이 core function만 가지고, 다른 module을 어떻게 load하고 communication해야한다는 정보만을 가진다는 점에서 microkernel approach와 유사하지만정리해보자면 kernel이 core service만 제공한다는 점은 micro kernel과 유사하지만, 다른 서비스를 dynamic하게 제공한다는 점에서 micro kernel과 차이가 있다.LKMs는 아무때나 loading하고 remove할 수 있다. 각각에 대한 유지보수가 쉽고, 필요없는 것을 메모리에서 바로 지울 수 있다.성능이나 보안, 사용성 측면에서 다른 structure들을 결합해서 사용하는 system이라고 할 수 있다.Windows는 largely mononlithic + some typical behavior of microkernel + dynamically loadable kernel modules
                    2.9 Building and Booting an Operating System
                    1. BIOS/UEFI
                    • 초기화 하고, 점검하는 단계이다.
                    • BIOS(Basic Input Output Software)
                    1. Bootstrap program or boot loader locates the kernel
                    • kernel이 어디있는지 찾아본다.
                    • windows→ boot manager, Linux → GRUB
                    1. Kernel이 memory에 로딩되고 시작한다
                    • 여기서부터 OS가 동작한다고 할 수 있다.
                    1. Kernel initializes hardware
                    • Kernel이 다시 Hardware를 초기화한다.
                    1. Root file system is mounted
                    • root file system을 mount해서 secondary file system을 사용할 수 있게 준비한다.
                  • OS를 부팅하는 과정에 대해 알아보자.
                  • Linux는 monolitic + modular
                  • Hybrid Systems
                  • [Example: Linux]
                  • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
                  • [Microkernel approach과의 유사점과 차이점]
                  • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
                  • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
                  • (Modules 가 그렇다는 건가..? 잘 모르겠다)
                  • OS structure중 가장 진보된 방식이라고 할 수 있다!
                  • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
                  • [Pros & Cons]
                  • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
                  • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
                  • [Pros & Cons]
                  • 그 사이에는 kernel이다 (layer 1~N)
                  • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
                  • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
                  • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
                  • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
                  • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
                  • Monolithic Structure
                  • system-call interface를 이용해 user와 kernel을 연결시킨다.
                  • system libraries는 system call을 제공할 수 있는 라이브러리이다.
                  • 맨 위에 user가 존재하고,
                  • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
                  • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
                  • Type of System Calls
                  • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
                  • Application Programming Interface(API)
                  • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
                  • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
                  • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
                  • System Calls
                  • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
                  • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
                  • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
                  • Service
                • OS를 부팅하는 과정에 대해 알아보자.
                • Linux는 monolitic + modular
                • Hybrid Systems
                • [Example: Linux]
                • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
                • [Microkernel approach과의 유사점과 차이점]
                • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
                • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
                • (Modules 가 그렇다는 건가..? 잘 모르겠다)
                • OS structure중 가장 진보된 방식이라고 할 수 있다!
                • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
                • [Pros & Cons]
                • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
                • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
                • [Pros & Cons]
                • 그 사이에는 kernel이다 (layer 1~N)
                • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
                • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
                • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
                • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
                • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
                • Monolithic Structure
                • system-call interface를 이용해 user와 kernel을 연결시킨다.
                • system libraries는 system call을 제공할 수 있는 라이브러리이다.
                • 맨 위에 user가 존재하고,
                • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
                • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
                • Type of System Calls
                • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
                • Application Programming Interface(API)
                • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
                • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
                • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
                • System Calls
                • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
                • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
                • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
                • Service
              • OS를 부팅하는 과정에 대해 알아보자.
              • Linux는 monolitic + modular
              • Hybrid Systems
              • [Example: Linux]
              • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
              • [Microkernel approach과의 유사점과 차이점]
              • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
              • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
              • (Modules 가 그렇다는 건가..? 잘 모르겠다)
              • OS structure중 가장 진보된 방식이라고 할 수 있다!
              • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
              • [Pros & Cons]
              • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
              • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
              • [Pros & Cons]
              • 그 사이에는 kernel이다 (layer 1~N)
              • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
              • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
              • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
              • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
              • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
              • Monolithic Structure
              • system-call interface를 이용해 user와 kernel을 연결시킨다.
              • system libraries는 system call을 제공할 수 있는 라이브러리이다.
              • 맨 위에 user가 존재하고,
              • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
              • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
              • Type of System Calls
              • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
              • Application Programming Interface(API)
              • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
              • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
              • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
              • System Calls
              • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
              • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
              • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
              • Service
            • OS를 부팅하는 과정에 대해 알아보자.
            • Linux는 monolitic + modular
            • Hybrid Systems
            • [Example: Linux]
            • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
            • [Microkernel approach과의 유사점과 차이점]
            • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
            • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
            • (Modules 가 그렇다는 건가..? 잘 모르겠다)
            • OS structure중 가장 진보된 방식이라고 할 수 있다!
            • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
            • [Pros & Cons]
            • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
            • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
            • [Pros & Cons]
            • 그 사이에는 kernel이다 (layer 1~N)
            • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
            • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
            • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
            • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
            • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
            • Monolithic Structure
            • system-call interface를 이용해 user와 kernel을 연결시킨다.
            • system libraries는 system call을 제공할 수 있는 라이브러리이다.
            • 맨 위에 user가 존재하고,
            • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
            • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
            • Type of System Calls
            • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
            • Application Programming Interface(API)
            • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
            • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
            • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
            • System Calls
            • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
            • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
            • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
            • Service
          • OS를 부팅하는 과정에 대해 알아보자.
          • Linux는 monolitic + modular
          • Hybrid Systems
          • [Example: Linux]
          • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
          • [Microkernel approach과의 유사점과 차이점]
          • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
          • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
          • (Modules 가 그렇다는 건가..? 잘 모르겠다)
          • OS structure중 가장 진보된 방식이라고 할 수 있다!
          • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
          • [Pros & Cons]
          • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
          • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
          • [Pros & Cons]
          • 그 사이에는 kernel이다 (layer 1~N)
          • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
          • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
          • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
          • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
          • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
          • Monolithic Structure
          • system-call interface를 이용해 user와 kernel을 연결시킨다.
          • system libraries는 system call을 제공할 수 있는 라이브러리이다.
          • 맨 위에 user가 존재하고,
          • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
          • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
          • Type of System Calls
          • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
          • Application Programming Interface(API)
          • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
          • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
          • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
          • System Calls
          • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
          • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
          • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
          • Service
        • OS를 부팅하는 과정에 대해 알아보자.
        • Linux는 monolitic + modular
        • Hybrid Systems
        • [Example: Linux]
        • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
        • [Microkernel approach과의 유사점과 차이점]
        • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
        • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
        • (Modules 가 그렇다는 건가..? 잘 모르겠다)
        • OS structure중 가장 진보된 방식이라고 할 수 있다!
        • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
        • [Pros & Cons]
        • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
        • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
        • [Pros & Cons]
        • 그 사이에는 kernel이다 (layer 1~N)
        • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
        • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
        • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
        • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
        • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
        • Monolithic Structure
        • system-call interface를 이용해 user와 kernel을 연결시킨다.
        • system libraries는 system call을 제공할 수 있는 라이브러리이다.
        • 맨 위에 user가 존재하고,
        • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
        • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
        • Type of System Calls
        • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
        • Application Programming Interface(API)
        • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
        • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
        • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
        • System Calls
        • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
        • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
        • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
        • Service
      • OS를 부팅하는 과정에 대해 알아보자.
      • Linux는 monolitic + modular
      • Hybrid Systems
      • [Example: Linux]
      • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
      • [Microkernel approach과의 유사점과 차이점]
      • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
      • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
      • (Modules 가 그렇다는 건가..? 잘 모르겠다)
      • OS structure중 가장 진보된 방식이라고 할 수 있다!
      • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
      • [Pros & Cons]
      • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
      • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
      • [Pros & Cons]
      • 그 사이에는 kernel이다 (layer 1~N)
      • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
      • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
      • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
      • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
      • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
      • Monolithic Structure
      • system-call interface를 이용해 user와 kernel을 연결시킨다.
      • system libraries는 system call을 제공할 수 있는 라이브러리이다.
      • 맨 위에 user가 존재하고,
      • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
      • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
      • Type of System Calls
      • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
      • Application Programming Interface(API)
      • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
      • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
      • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
      • System Calls
      • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
      • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
      • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
      • Service
    • OS를 부팅하는 과정에 대해 알아보자.
    • Linux는 monolitic + modular
    • Hybrid Systems
    • [Example: Linux]
    • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
    • [Microkernel approach과의 유사점과 차이점]
    • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
    • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
    • (Modules 가 그렇다는 건가..? 잘 모르겠다)
    • OS structure중 가장 진보된 방식이라고 할 수 있다!
    • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
    • [Pros & Cons]
    • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
    • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
    • [Pros & Cons]
    • 그 사이에는 kernel이다 (layer 1~N)
    • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
    • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
    • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
    • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
    • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
    • Monolithic Structure
    • system-call interface를 이용해 user와 kernel을 연결시킨다.
    • system libraries는 system call을 제공할 수 있는 라이브러리이다.
    • 맨 위에 user가 존재하고,
    • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
    • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
    • Type of System Calls
    • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
    • Application Programming Interface(API)
    • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
    • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
    • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
    • System Calls
    • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
    • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
    • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
    • Service
  • OS를 부팅하는 과정에 대해 알아보자.
  • Linux는 monolitic + modular
  • Hybrid Systems
  • [Example: Linux]
  • module이 message passing을 통해 정보를 교환할 필요가 없다는 점에서 micro kernel보다 효율적이다!
  • [Microkernel approach과의 유사점과 차이점]
  • 각 Kernel section이 정의되어 있고, interface가 유지가능하다는 점에서 layered system과 유사하지만,
  • ⇒ Kernel이 core service를 제공하고, 다른 service들은 dynamically하게 제공되는 것이 특징이다.
  • (Modules 가 그렇다는 건가..? 잘 모르겠다)
  • OS structure중 가장 진보된 방식이라고 할 수 있다!
  • 또한 유지 보수가 쉽고, secure하며 reliable하다는 장점이 있다.
  • [Pros & Cons]
  • 별도의 address space가 원래 OS가 제공하던 기능을 수행한다.
  • 각 layer별로 기능을 정의하는 것이 어렵고, 여러개의 layer를 통과하는 동작은 overhead가 굉장히 크기 때문에 적은 단의 layer 수를 가져야 한다는 단점이 있다.
  • [Pros & Cons]
  • 그 사이에는 kernel이다 (layer 1~N)
  • 각 layer는 제한된 기능을 갖는 작은 component로 구성된다. 또한 더 상위 layer에 의해 invoke된다.
  • Tightly coupled system이라 아주 밀접하게 연결된 system이어서 한 부분을 변경하게 되면 그 영향을 넓게 미치고, kernel을 지속해서 발전시키기 어려운 구조이다.
  • system-call interface부터 device drivers까지가 kernel인데, 내부적으론 module로 나눠져 있어서 Layered kernel이다. 하나의 kernel에 다 들어있어서 효율적이라는 장점이 있지만, 구현과 확장이 어렵다는 단점이 존재한다.
  • 위의 그림이 초기 original UNIX 구조인데, 보면 kernel과 system programs로 구성되어 있다.
  • 모든 kernel이 1개의 file 형태로 된 극단적으로 단순한 구조이다.
  • Monolithic Structure
  • system-call interface를 이용해 user와 kernel을 연결시킨다.
  • system libraries는 system call을 제공할 수 있는 라이브러리이다.
  • 맨 위에 user가 존재하고,
  • OS의 구조에는 어떤 것이 있는지 한 번 알아보자!
  • 2.5절에서 확인했듯이, OS마다 고유한 System Call을 가진다.
  • Type of System Calls
  • [Example] C에서 printf()(사용자가 사용하는 함수) 실행시키면 실질적으로 System call에서는 write() **(System call에서 사용하는 함수)**API 이용해서 출력 device에서 data를 출력하도록 시킴!@
  • Application Programming Interface(API)
  • ⇒ 단순한 작업에도 상당히 많은 System Call이 필요함!
  • file을 copy하는 단순한 작업이지만, 파일을 열고, 읽고, error handling을 함께 진행하고 , 이러한 모든 과정이 system call을 다 필요로 함!
  • 특정 task들을 수행하기 위해서, C and C++ 혹은 assembly language로 쓰여지는 function이다.
  • System Calls
  • 사용자와 OS가 통신하기 위한 대표적인 방법들에 대해 소개한다.
  • 그와 반면해 오른쪽의 resource allocation, accounting, protection and security는
  • 간단하게 구분을 해보자면 왼쪽부터 program execution, I/O operations, file systems, communication, error detection까지는
  • Service

'OS' 카테고리의 다른 글

[운영체제] Threads & Concurrency  (0) 2024.04.11
[운영체제] Processes(2)  (2) 2024.04.03
[운영체제] Processes  (0) 2024.04.01
[운영체제] OS 소개(2)  (0) 2024.03.31
[운영체제] 컴퓨터 구조 및 OS 소개  (0) 2024.03.27