--- tags: 大三 --- # 作業系統期中筆記 I - 國立中興大學大資訊工程系 Autumn 2020 CH1-3 ![](https://img.shields.io/badge/dynamic/json?color=blue&label=%E7%B8%BD%E8%A7%80%E7%9C%8B%E6%95%B8&query=%24.viewcount&suffix=%E4%BA%BA%E6%AC%A1&url=https%3A%2F%2Fhackmd.io%2F19Osz5jKSQqIHk6Tl3OP2g%2Finfo) ![](https://img.shields.io/badge/%E5%91%BD%E4%B8%AD%E7%8E%87-極高-yellowgreen) [作業系統期中筆記整理 - 國立中興大學大資訊工程系 Autumn 2020 (Part II)](https://hackmd.io/6i05ZGzzSBCpF_7FE50VIQ) ## CH1 Introduction Computer is consisted of: 1. hardware > OS have **device driver(software)** for each **device controller(hardware)** for management 2. operating system > Between a user/app and the computer hardware > > Goal: > Manage the computer hardware and provides an environment for apps to run 3. system and application programs 4. users ### Event-Driven OS #### Interrupt > **Device controller raises an interrupt** by asserting a signal on the interrupt-request line > > CPU **catches** the interrupt > > CPU **dispatches** it to the interrupt handler > > Interrupt handlers **serve** the device #### Trap (aka. exception) > A software-generated interrupt caused by > 1. Error (e.g. 除以零) > 2. Request for operating system service (e.g. system call) *Q: Please list the three situations that the CPU would enter into the kernel mode.* *A: 1. system call 2. interrupt 3. trap* ### OS structure 1. single-programming system > One job at time -- very inefficient 2. multi-programming system > **只有 I/O 時才會切換 process** > run multiple programs keep either the CPU or I/O devices busy at all times 3. time-sharing system > A logical extension of multi-programming > 硬體設定計時器時間到了切換 processes ### Dual-mode and Multi-mode of Operations To ensure proper execution of the system, most distinguish between the execution of OS code and user-defined code. Thus, hardware supports dual-mode or multi-mode operations. + Allow OS to protect itself and other system components. + Privileged instruction(特權指令) can only execute in kernel mode. 有些操作只有 OS 有權限做到,比如 CLI (一種拒絕 cpu interrupt 的指令),只有 OS 有權使用該指令 Modern CPUs have at least two execution modes -- user modes and monitor modes(aka. supervisor mode, kernel mode). e.g. x86 has 4 kinds of modes, ARM has 7 kinds of modes. ## CH2 OS Structure OS provides services to programs and users. Two sets of services: 1. Provides functions helpful to the user + user interface > CLI(command-line Interface), GUI (Graphical User Interface) + program execution + I/O operations + File-system manipulation + Communications + Error detection 2. Ensure the efficient operation of the system via resource sharing + Resource allocation > When multiple users running concurrently, resources must be allocated to each of them + Logging (記錄) > Keep track of which users use how much and what kinds of resources + Protection and security ![](https://i.imgur.com/OR2dLfc.png) ### System calls + An interface for app program to use OS services + e.g., open(), read(), write(), close(), ...etc + Even simple program may make heavy use of system calls However, system calls are often accessed by programs via a high-level **Application Program Interface(API)** rather than directly call the system call. Three most common APIs + Win32 API for windows + POSIX API for POSIX-bases systems + Java API for the Java virtual machine(JVM) There are managed by run-time support library Standard C Library: C programming uses functions defined in libc, which provides a wrapper for a portion of system calls. (比如 printf 就是把 system call write() 做包裝,讓碼農直接 call printf 而不需要用 write()) ![](https://i.imgur.com/KpJFA43.png) Why use APIs rather than system call? 1. portability (可以跨平台) 2. Easier to use (printf 比 write 好用) ### Why app are OS specific Fundamentally, app compiled on one OS usually not executable on other OSes, due to 1. At the system level + OSes have different binary format for executable + ELF for unix-based os + PF for windows + CPUs have different instruction sets + OSes define their own system call 2. At the application level + An applications call one set of APIs will ot work on an OS without the same API ### OS design and implementation User goals and System goals + User goals – OS should be convenient to use, easy to learn, reliable, safe, and fast + System goals – OS should be easy to design, implement, and maintain, as well as flexible, reliable, error-free, and efficient 早期的作業系統如 MS-DOS 是用 intel-8088 asm 寫的,用組語寫的好處是跑的比 C 快,但其實並沒有,因為現代強大的編譯器優化過後 C 跑的跟組語差不多快了。主要還是差在演算法和資結。 ### OS structure 1. Monolithic structure > 早期的作業系統採用此法 > **pros**: very little overhead > **cons**: difficult to implement and extend 2. Layered approach > OS is divided into a number of layers > **pros**: simplicity of construction and debugging. information hiding (do not have to know the details of other layers, 類似網際網路 5 層架構,大家各司其職) > **cons**: hard to determine the number of layers and hard to define functionality of each layer. 另外這個方法慢到靠北 (less efficient) 3. Microkernels > motivation: due to UNIX became large and difficult to manage > **pros**: easier to extend OS, easier to port the OS to new architectures, more reliable and more secure > **cons**: performance overhead by message passing between services via <u>communication facility</u> > e.g., Windows NT (microkernel), Windows XP (monolithic kernel) 4. Modules > An OS consists of a core kernel and a set of loadable kernel modules (LKMs) that can dynamically loadable at run time > **pros**: > + more flexible than layered system because a module can call any other module > + more efficient than microkernel (kernel module communications is **function call, not by message passing(message passing = communication facility 這個詞有可能會考哦**) > > **cons**: > 講議沒寫 5. Hybrid systems > 大雜燴 > Linux: monolithic + modular > Windows: monolithic + micro kernel + modular ### System boot Two-step booting process in PCs > Bootstrap loader in ROM → boot program on disk → kernel bootstrap program or bootstrap loader are + small piece of code stored in ROM or EEPROM + modern system replace BIOS with Unified Extensible Firmware Interface (UEFI) + locate the kernel, load it into memory, and start its execution. ## CH3 Process ![](https://i.imgur.com/RinJsGD.png) + stack: variables in function + heap: dynamic variables + data + uninitialized data (.bss) + initialized data (.data) + text (.code) ### Process control block (PCB) *Q: What is purpose of process control block (PCB)?* *A: Keep information associated with each process* + Process state + Program counter (PC) + CPU register + CPU scheduling information + Memory-management information + Accounting information + I/O state information ### Context switch *Q: What is context?* *A: Context is saved and represented in the PCB of a process. e.g., process id, cup reg, memory areas, various tables, etc.* *Q: What is context switch?* *A: CPU switch from one process to another process.* *Q: The context is stored in a kernel data structure, what is this structure?* *A: Program counter block (abbr. PCB)* *Q: Provide a detailed description of all activates of a context switch. (= During context switch, what operations the operating system must perform?)* *A: The system must save the state (context) of the old process and load the state (context) of new process from it’s PCB.* ![](https://i.imgur.com/szfrFbH.png) ### Process Scheduling ![](https://i.imgur.com/EdPV2ys.png) + ready: waiting to be assigned to a processor + waiting: **waiting for some events to occur** + running: only one process can be running on any core ![](https://i.imgur.com/58Osw9J.png) 剩下的去看第五章 ### Operation on processes #### Process creation A process may create several new processes + The creating process is called parent + The new processes are called children of that process Execution + Parent and children execute concurrently, or + Parent waits until children terminate Address space + `fork()` Child duplicate of parent, or has the same program and data as the parent + `fork() + exec()`Child has a new program loaded into it #### Process termination + When a process terminates and before parent calls wait(), the terminated process becomes a **zombie process**. + If parent did not invoke wait() and is terminated, the child process becomes as **orphans** ### Interprocess communication (IPC) > node.js 的 IPC 套件 https://www.npmjs.com/package/node-ipc 1. Message passing (message queue) > 1. Useful for exchanging smaller amounts of data (via memory) > 2. Easier to implement > 3. Slow (due to system calls required) > 4. No conflict need to be avoided > > ```c > #include<mqueue.h> > mq_open() > mq_send() > mq_reveive() > mq_close() > ``` 2. Shared memory > 1. Faster (due to no system calls required) > 2. Need to protection and synchronization > ```c > #include<sys/mman.h> > shm_open() > mmap() > shm_unlink() > ``` ![](https://i.imgur.com/UX8R6ci.png) **↑ 左為 message passing;右為 shared memory** ### Socket & Remote procedure calls (RPC) RPC and RMI (Remote Method Invocation) are high level form of communication. Socket is low level ![](https://i.imgur.com/jpPcLbA.png) ↑ **socket (TCP)** #### RPC problems > The main challenge of RPC is to look as much like local procedure call, i.e., transparency 什麼是 transparency? Client & server may be different types of machine different data representation, e.g., big-endian vs. little-endian, ASCII, EBCDIC, 1's complement vs. 2's complement Solution. 透過 External data representation (XDR). machine independent data representation. 實作上透過一個叫 stub 的 library (A library in the client and server) + Client stub (like sender) + Locates the server + Marshal params into a msgs + Calls OS (i.e., calling socket APIs) to send msg to the server + Waits for result returned from the server + **Machine-dependent data => XDR** + Server stub (like receiver) + Be blocked waiting for incoming msg by calling receive() + Unmarshal the params + Clls the corresponding procedure in the conventioanl way + Returns result to the caller. + **XDR => Machine-dependent data** *Q: Explain the purpose of external data representation (XDR).* *A: 為了解決client和server用不同平台而導致的data representation的問題。* <style> #author{ border: 1px solid gray; border-radius: 10px; padding: 10px; width: 80%; margin: 10px auto; } </style> <div id="author"> <p>111級中興資工</p> <p>作者:<a href="https://github.com/liao2000">廖柏丞</a> </div>