Storage Definitions and Notation Review
가징 기본적인 컴퓨터의 저장 단위는 bit입니다. 이는 2개의 값, 0과 1을 저장할 수 있는 저장 공간의 크기를 말합니다. 컴퓨터가 발전함에 따라 더 큰 저장 단위가 필요해졌고, 8-bit를 묶어서 byte라고 정의했습니다. 그리고 각각 1024byte를 KB, 1024^2byte를 MB 등등의 단위를 붙여 더 큰 저장단위를 만들어갔습니다.
한편, word라는 단위로 컴퓨터 구조의 가장 기본적인 저장 단위를 나타내기도 합니다. 이는 컴퓨터 구조에 따라 달라질 수 있습니다. 예를 들어, 64-bit컴퓨터의 경우 메모리 주소의 word는 64-bit(8byte)입니다.
Storage Structure
컴퓨터에서 사용하는 저장장치는 다음과 같습니다:
- Main Memory: CPU가 접근할 수 있는 저장 공간을 말합니다.
- Random access: memory의 아무 공간이나 읽고, 쓰고, 저장할 수 있습니다(e.g., RAM).
- Typically volatile: 일반적으로 main memory는 휘발성입니다. 만약 컴퓨터를 종료한다면 memory에 있는 정보들은 사라지게 됩니다.
- Secondary Storage: main memory의 확장판으로 비휘발성의 큰 데이터 공간을 제공합니다.
- ex. Hard-disks: 자석장치를 통해 데이터를 기록하는 원판 형태의 장치를 말합니다. 이때 디스크는 track으로 구분되어있고, 각 track은 sector로 구분됩니다. 또한 disk controller는 device와 computer(CPU)와의 논리적인 소통을 담당합니다.
- Solid-state disk: 하드 디스크보다 빠르고 저장 공간도 많지만 비휘발성인 저장장치입니다.
- Various technologies: 정말 다양한 기술들의 집합입니다.
- Becoming more popular: 최근 가장 좋은 저장장치입니다.
Storage Hierachy
저장 시스템은 일반적으로 계층 구조를 띕니다.
위 계층구조에 따르면 위로 올라갈수록 높은 접근속도를 갖지만, 휘발성을 띄며, 저장 공간이 작아지고 가격이 비싸진다는 특징을 갖습니다. 이런 계층구조에서 caching기술이 필수적인데, 이는 2차 저장장치(secondary storage)에 있는 데이터를 접근 속도가 더 빠른 저장 장치로 복사하여 저장하는 기술을 말합니다. 이때 복사본을 갖는 저장장치를 cache라고 합니다.
만약 CPU가 main memory에 있는 instruction을 가져오는 것이 아닌, HD에 있는 instruction을 가져온다면 HD의 느린 접근속도로 인해 오버헤드가 발생합니다. 하지만 미리 HD에 있는 데이터를 접근 속도가 빠른 main memory로 복사하여 옮겨놓는다면 이런 단점을 해결할 수 있습니다.
한편, Device driver은 kernel의 일부분으로 동작하며 각기 다른 종류의 device controller와 kernel사이의 일관된(uniform) 인터페이스를 제공하는 역할을 맡습니다. 이를 통해 kernel은 각 device의 특징에 맞게 다양한 명령을 내릴 필요가 없게됩니다.
Caching
캐싱에 대해 다시 한 번 짚고 넘어가겠습니다.
이 기술은 컴퓨터의 성능에 매우 중요한 기술로 컴퓨터의 매우 다양한 수준에서(in hardware, operating system, software, etc.) 사용되고 있습니다. 이는 조금 더 느린 저장장치에서 조금 더 빠른 저장장치로 임시적으로 데이터를 복사하여 저장하는 것을 말합니다.
이때 더 빠른 저장장치(cache)는 CPU가 찾는 정보가 거기에 있는지 없는지를 확인받습니다. (1) 만약 데이터가 cache에 존재한다면, 이를 cache hit라고 부르며, 매우 빠르게 정보에 접근할 수 있게 됩니다. (2) 만약 데이터가 cache에 존재하지 않는다면, 이를 cache miss라고 부르며, 데이터 접근이 오래걸릴 수 있습니다.
일반적으로 cache는 cache된 저장장치보다 저장공간이 작습니다. 그렇기 때문에 cache의 management overhead가 발생할 수 있습니다. 예를 들어 (1) 데이터를 복사해서 cache에 저장한 상태에서, 2차 저장공간에서 원본 데이터가 수정된 경우 복사본도 이에 맞게 수정해야하는 오버헤드(cache consistecy), (2) 데이터를 복사한 것이기 때문에 하나의 데이터가 두 개의 저장장치에 저장되어있는 것입니다. 이는 데이터 저장공간의 비효율을 의미합니다(data redundency). 등등 다양한 문제가 있을 수 있고 이를 OS가 잘 처리할 필요가 있습니다.
Direct Memory Access Structure
DMA기술은 매우 빠른 속도(메인 메모리 수준)의 I/O작업을 필요로할 때 사용됩니다. 이는 DMA controller를 통해 CPU의 간섭 없이 device controller와 memory사이에 데이터를 주고 받는 기술을 말합니다.
https://ryotta-205.tistory.com/89
DMA(Direct Memory Access)
DMA의 정의 DMA는 특정한 HW 시스템(Hard-disk, GPU 등)이 CPU와 독립적으로 주 시스템 메모리(RAM)에 Access 할 수 있도록 하는 컴퓨티 시스템의 기능이다. CPU는 상태, 제어정보만을 교환하고 직접적인 데
ryotta-205.tistory.com
Computer-System Architecture
Multiprocessors system은 사용과 중요성 측면에서 중요해지고 있습니다. 이는 parallel systems혹은 tightly-coupled system으로도 잘 알려져있습니다. 이는 (1) throughput의 증가, (2) 규모의 경제, (3) reliability의 증가(예를 들어 하나의 CPU가 죽어도 다른 CPU가 이를 처리할 수 있습니다)의 측면에서 유리합니다.
Multiprocessors system에는 두 가지 타입이 존재합니다. (1) 먼저 Asymmetric Multiprocessing으로 이는 각 processor가 서로 다른 역할(Master-Slave)을 수행하는 것입니다. (2) 그리고 Symmetric Multiprocessing은 각각의 processor가 수행하는 task가 모두 같은 것을 말합니다.
A Dual-Core Design
이와 유사하게 Multi-chip혹은 multicore가 있습니다.
이는 하나의 시스템이 하나의 칩에 모두 들어있는 것을 말합니다.
위 그림은 두 개의 CPU core가 하나의 processor에 들어있는 Multi-core구조와 그런 processor가 두 개가 있는 multi-processors 구조를 보여주고 있습니다.
Clustered Systems
여러 개의 CPU를 사용한다는 점에서 Multi-processor system과 유사하지만, 여러 개의 시스템 자체를 함께 동작하게 하는 시스템이라는 점에서 차이점이 존재합니다. 즉, multi-processor system은 tightly-coupled system이지만 clustered system은 losly-coupled system으로 볼 수 있습니다.
일반적으로 Storage-area network(SAN)을 통해 하나의 공유하는 저장 공간을 사용합니다. 또한 각각의 서비스의 실패에 대한 높은 적응력(high-availability)을 제공합니다(이는 multi-processor system의 장점과 유사). 이때 clustered system도 두 가지 종류로 나눌 수 있습니다. (1) Asymmetirc clustering은 각각의 시스템이 서로 다른 역할을 수행하며 문제 상황을 대비해 하나의 시스템을 hot-standby 모드로 사용합니다(Active-Standby). (2) Symmertic clustering은 각각의 시스템이 서로 다른 역할을 수행하며 서로 모니터링합니다(Active-Active).
Operating System Structure
Multiprogramming (Batch system)은 효율을 위한 기술입니다. 만약 한 프로그램이 모든 CPU와 I/O자원을 차지한다면 이는 비효율적일 것입니다. 만약 실행중인 프로그램이 I/O작업을 요청한다면 다음 실행할 프로그램이 준비되어있지 않는한, I/O작업이 끝날때까지 CPU는 동작을 멈출것입니다.
Multiprogramming은 code혹은 data인 job을 조작해서 CPU가 계속 실행중이도록 합니다. 이는 실행해야하는 모든 job들의 일부를 메모리안에 유지함으로써 가능합니다. 이때 이 메모리 공간을 Ready queue라고 부릅니다. I/O작업등으로 인해 CPU가 다음 프로그램을 실행해야할 때 CPU는 RQ에서 다음 job을 선택하여 실행합니다. 이를 job scheduling이라고 부릅니다.
한편 Timesharing(multitasking) 또한 효율을 위한 기술입니다. 이는 사용자와의 interactive한 컴퓨팅을 위해 매우 자주 CPU가 job을 스위칭하는 것입니다. 이를 통해 많은 수의 프로그램이 동시에 실행되고있는 것처럼 보이게 할 수 있습니다. 이때 Response time, 즉 반응시간은 1초 이내여야합니다.
https://maivve.tistory.com/172
[OS] MultiProgramming, MultiProcessing, MultiThreading, MultiTasking 간단 정의 및 차이점!
안녕하세요. 이 카테고리는 "직무면접 중 CS 지식 대비" 이고, 이 게시글은 "면접 대비 간단한 정리" 입니다. 상세한 정보 또는 딥한 원리를 알고 싶으신 분은 별도의 구글 검색 또는 나무위키를
maivve.tistory.com
만약 RQ에 프로세스들을 저장해야하는데 메모리에 공간이 없는 경우, swapping을 통해 이를 수행합니다.
이렇게 프로그램, 프로세스 단위로 swapping이 일어나는 것은 오버헤드가 큽니다. 그래서 이를 페이지(page)단위로 수행하여 메모리의 저장 공간을 임시적으로 크게 보이게 만들어주는 것을 가상 메모리(virtual memory)라고 부릅니다.
Operating-System Operations
OS의 동작은 Interrupt driven입니다.
하드웨어는 device에 의해 interrupt를 발생시키며, 소프트웨어는 exception이나 trap이라 부르는 interrupt를 발생시킵니다. exception이나 trap에는 division by zero와 같은 software error를 포함하여 os에 interrupt를 요청하는 system call, 혹은 무한 루프나 os나 다른 프로세스를 수정하는 등 프로세스상의 문제들을 포함합니다.
OS는 OS자기 자신을 다른 시스템으로부터 보호하기 위해 Dual-mode를 지원합니다. 이는 User mode와 Kernel mode로 나눠지는데, mode bit을 통해 현재 mode를 알 수 있습니다. *mode bit는 CPU당 존재하며, 싱글코어의 경우 한 thread가 system call로 인해 kernel mode에 들어간다면 다른 thread는 이를 기다려야합니다.
이 mode bit는 user code와 kernel code(e.g., interrupt service routine, system call, etc.)를 구분할 수 있게 해줍니다. system call과 같은 몇몇 instruction들을 특권(previleged) 명령으로 오직 kernel mode에서만 실행될 수 있습니다. 만약 system call에 의한 동작이 끝난다면 다시 mode bit가 변경되어 user mode로 돌아오게됩니다.
*최근의 CPU는 multi-mode를 지원하기도 합니다. 이는 virtual machine manager (VMM)모드를 지원하기 위함입니다.
위 그림은 user process에서 system call을 통해 kernel mode로 진입한 후, system call이 끝난 후 다시 user mode로 돌아간 상황을 그림으로 나타낸 것입니다.
Process Management
process는 program이 실행중인 상태를 말합니다(A process is a program in excution). 즉, program은 정적인 개체(passive entity)이고, process는 동적인 개체(active entity)입니다. process는 CPU, I/O, memory, files, initialization data 등 다양한 자원을 필요로합니다. 그리고 OS는 이를 관리합니다.
process의 실행 흐름을 thread라 합니다. 하나의 thread만 있는 프로세스는 오직 하나의 program counter를 갖습니다. 이때 program counter는 다음 실행할 명령의 위치를 가르키고 있습니다. Multi-threaded process의 경우 thread의 개수 만큼의 program counter를 갖고 있습니다.
이렇게 thread, timesharing 등을 통해 프로그램을 concurrent하게 실행할 수 있습니다. 이는 parellel과는 조금 다릅니다. parellel하게 프로그램을 실행하는 것은 CPU의 개수가 2개 이상이어서 "실제로" 동시에 실행되는 것을 말하며, concurrent하게 프로그램을 실행하는 것은 다양한 기법을 통해 동시에 실행되는 것"처럼" 보이게하는 것을 말합니다.
process management 활동으로는 다음이 있습니다:
- Creating and deleting both user and system processes
- Suspending and resuming processes
- Providing mechanisms for process synchronization
- Providing mechanisms for process communication (e.g., IPC)
- Providing mechanisms for deadlock handling
Memory Management
OS는 메모리도 관리해야합니다. 실행하는 프로그램의 모든 (혹은 일부분) 명령들은 반드시 메모리에 존재해야합니다(그래야 CPU가 실행할 수 있어서). 또한 프로그램이 실행되는데 필요한 모든 (혹은 일부분) 데이터 또한 메모리에 존재해야합니다. 따라서 OS는 무엇이 메모리에 존재해야하며, 언제 메모리에 존재해야하는지를 결정해야합니다.
memory management 활동으로는 다음이 있습니다:
- Keeping track of which parts of memory are currently being used and by whom
- Deciding which processes (or parts thereof) and data to move into and out of memory (e.g., swapping, virtual memory)
- Allocating and deallocating memory space as needed
Storage Management
OS는 정보들을 일정하고 논리적인 관점으로 저장하고 제공합니다. 이 저장의 단위를 file이라고 부릅니다.
파일은 directories를 통해 조직되며, 누가 무엇을 접근할 수 있는지에 대한 접근 권한의 통제를 OS가 갖습니다.
File-system management 활동으로는 다음이 있습니다:
- Creating and deleting files and directories
- Primitives to manipulate files and directories
- Mapping files onto secondary storage
- Backup files onto stable (non-volatile) storage media
Mass-Storage Management
main memory에 저장하기에는 적절하지 않으며(자주 사용하지 않아서), 긴 시간동안 데이터를 보존해야하는 경우 disk가 사용됩니다. 이런 대용량 저장 장치를 관리하는 것 또한 중요합니다. 이때 이런 저장 장치를 사용하는 시간은 일반적으로 disk subsystem과 disk의 알고리즘에 큰 영향을 받습니다.
이런 대용량 저장 장치에 저장되는 데이터들은 애초에 빠르게 접근할 필요가 없을 수도 있습니다. Tertiary storage (e.g., optical storage, magnetic tape)같은 것들은 OS에 의해 관리되어야 하긴 하지만, 자주 접근하지 않아도 되는 데이터들이 주로 존재하기 때문입니다. *WORM (write-once, read-many-times)
이때의 OS의 활동은 다음과 같습니다:
- Free-space management: 용량이 큰 만큼 빈공간도 많습니다.
- Storage allocation
- Disk scheduling
Migration of data "A" from Disk to Register
위는 disk에서 register까지의 데이터 "A"의 이동을 나타낸 것입니다. 이렇게 데이터를 이동하는 동안 OS는 cache coherency 문제를 반드시 신경쓰고 있어야합니다. 즉, 가장 최신의 데이터를 caching해야하는 것입니다. 이는 multitasking 환경에서 더욱 중요합니다.
I/O Subsystem
OS의 또 다른 목적은 하드웨어 디바이스의 디테일들을 사용자들이 볼 수 없게 숨겨주는 것입니다. 이를 위해서 I/O subsystem은 (1) I/O buffering이나 caching, spooling과 같은 메모리 관리를 해야합니다. (2) 또한 device-driver를 통해 일관성있는 interface를 제공해야합니다.
https://www.geeksforgeeks.org/spooling-in-operating-system/
Spooling in Operating System - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
'[학교 수업] > [학교 수업] Operating System' 카테고리의 다른 글
[Operating System] Chapter 3: Processes (1) | 2025.04.05 |
---|---|
[Operating System] Chapter 2 & 3: Processes | Week 4 (0) | 2025.03.29 |
[Operating System] Chapter 2: Operating-System Structures | Week 3 (0) | 2025.03.24 |
[Operating System] Chapter 1: Introduction | Week 1 (0) | 2025.03.10 |