일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 조인
- backpropagate
- Arificial Intelligence
- 운영체제
- System Structure
- RuntimeError
- 데이터베이스
- OS
- Program Execution
- 디비전 연산자
- dataloader
- kernel
- process
- 세미조인
- mode bit
- 비지도학습
- AI
- Artifical Intelligence
- 실렉션
- Operating System
- Database
- SQL
- 카티션 곱
- 중첩질의
- 동기식 입출력
- camerax
- 정규화
- TicTacToe
- Hyperparameters
- pytorch
- Today
- Total
aajin126's devlog
[Operatin System] 컴퓨터 시스템 구조 & 프로그램 실행 본문
[Operatin System] 컴퓨터 시스템 구조 & 프로그램 실행
aajin126 2023. 3. 23. 16:57컴퓨터 시스템 구조
Terms
- Timer : 정해진 시간이 프르면 프로그램이 소유하고 있던 제어권을 다시 cpu에게 반납이 되도록 인터럽트를 발생시킨다.
- DMA Controller : CPU이 도움없이 데이터를 직접 메모리로 전송하는 장치, CPU의 반복 작업을 대신하여 CPU를 효율적으로 사용할 수 있도록 해준다.
- Interrupt line : 하드웨어 컨트롤러가 Interrupt를 발생시켰을 때 CPU에게 Interrupt가 발생되었다는 사실을 알리기 위해 사용한다.
- Mode bit : CPU가 실행 중인 프로세스를 멈추고 system적인 일을 할 때 mode bit을 바꾸는 하드웨어적인 두가지 모드의 operation을 지원한다.
Mode bit
: 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
1 (사용자 모드) : 사용자 프로그램 수행
0 (모니터 모드) : OS 코드 수행
보안을 해칠 수 있는 중요한 명령어는 모니터 모드에서만 수행 가능한 'previleged instruction(특권 명령)' 으로 규정
- Interruption이나 Exception 발생 시 하드웨어가 mode bit을 0으로 바꾼다.
- 사용자 프로그램에게 CPU를 넘기기 전에 mode bit을 1로 바꾼다.
Timer
- 타이머는 매 클럭 틱 때마다 1씩 감소한다.
- 타이머 값이 0이 되면 타이머 인터럽트 발생한다.
- CPU를 특정 프로그램이 독점하는 것으로부터 보호한다.
- 타이머는 Time sharing을 구현하기 위해 널리 이용된다.
Device Controller
I/O device controller
- 해당 I/O 장치 유형을 관리하는 일종의 작은 CPU이다.
- I/O 장치는 플러그와 소켓을 통해 연결되는데, 이 소켓이 device controller와 연결되어 있다. 이 device controller가 버스를 통해 CPU와 직접적으로 통신을 한다. ( driver은 운영체제가 장치들과 호환되게 해주는 하나의 코드이고, 이 코드를 device controller가 인식하는 것이다.)
- 제어 정보를 위해 register을 가진다.
- local buffer를 가진다. (CPU 안에 있으면 register로 사용되고, 밖에 있다면 DRAM으로 사용된다.)
- Device controller는 I/O의 수행이 끝났을 경우 interrupt로 CPU에 그 사실을 알린다.
- Device driver(장치구동기) : 각 장치에 맞게 번역을 해주는 소프트웨어 (OS 코드 중 각 장치별 처리루틴)
- Device controller(장치제어기) : 각 장치를 통제하는 작은 CPU (하드웨어)
입출력(I/O) 수행
모든 입출력 명령은 previleged instruction(특권 명령)이다.
사용자 프로그램은 어떻게 I/O를 하는가?
- 시스템콜(System call) : 사용자 프로그램은 운영체제에게 I/O를 요청한다. (System call로 들어가면 모니터 모드로 전환된다.)
- Trap을 사용하여 인터럽트 벡터의 특정 위치로 이동한다.(요청한 I/O에 해당하는 interrupt number를 찾아서)
- 제어권이 인터럽트 벡터가 가리키는 인터럽트 서비스 루틴(ISR)로 이동한다.
- 올바른 I/O 요청인지 확인한 후 I/O가 수행된다.
- I/O 완료 시 제어권을 시스템콜 다음 명령으로 옮긴다.
인터럽트(Interrupt) & 시스템콜(System Call)
인터럽트 당한 시점의 레지스터와 다음에 실행할 명령의 주소를 PC에 저장한 후 CPU의 제어를 인터럽트 처리 루틴에 넘긴다.
과정을 살펴보자
-System call로 인한 Interrupt
process A가 프로그램 명령 수행중에 디스크 입출력 명령을 읽은 경우를 생각해 보자. 사용자 프로그램은 입출력 장치에 접근하는 명령을 수행할 수 없다. user mode에서 특권 명령을 수행할 수 없기 때문이다.
이련 경우에 사용자 프로그램은 운영체제에게 시스템 콜을 통해 특권명령을 대신 수행해달라고 요청한다. 시스템 콜은 주소 공간 자체가 다른 곳(커널의 code영역)으로 이동해야 하므로 프로그램이 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이루어진다.
그러면 CPU가 인터럽트 라인을 검사하고 인터럽트가 발생한 것을 감지하게 된다. 현재 수행중인 사용자 프로그램을 잠시 멈추고 CPU의 제어권을 운영체제에게 양도한다.(모니터 모드 / Kernel mode) OS는 System call을 호출한 장치나 프로그램에 해당하는 interrupt number을 interrupt vector table에서 찾아 해당 부분이 가진 주소의 ISR(IHR) 함수를 호출한다. ISR가 주도하여 명령을 처리하고 interrupt 다음의 명령어를 실행한다.
Interrupt (넓은 의미)
- Interrupt(하드웨어 인터럽트): 하드웨어가 발생시킨 인터럽트
- Trap(소프트웨어 인터럽트)
- Exception: 프로그램이 오류를 범한 경우
- System call: 프로그램이 커널 함수를 호출한 경우 (사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출함)
인터럽트 처리 루틴
실제 인터럽트를 처리하기 위한 루틴으로 인터럽트 서비스 루틴(ISR)이라고도 한다. 운영체제의 코드 영역에는 인터럽트별로 처리해야할 내용이 이미 프로그램되어 있다. 인터럽트를 처리하는 커널 함수이다.
인터럽트 벡터
인터럽트 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블이다.
동기식 입출력과 비동기식 입출력
동기식 입출력(Synchronous I/O)
I/O 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어간다.
구현 방법 1 : 하나의 작업이 끝날 때까지 기다렸다가 작업이 끝나면 다음 작업을 시작하는 방법이다.
- I/O가 끝날 때까지 CPU를 낭비시킨다.
- 매시점 하나의 I/O만 일어날 수 있다.
구현 방법 2: 요청한 작업을 처리하는 중에는 요청한 프로세스를 ready queue로 보내고 다른 작업을 수행하는 방법이다.
- I/O가 완료될 때까지 해당 프로그램에게서 CPU를 빼앗는다.
- I/O가 처리를 기다리는 줄에 그 프로그램을 줄 세운다.
- 그 동안 다른 프로그램에게 CPU를 준다.
- 요청한 프로그램은 다른 작업을 수행할 수 없기 때문에 동기식 입출력이다.
비동기식 입출력(Asynchronous I/O)
I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어간다.
예시 :
- 프로그램이 read 명령어를 call 함 -> 요청한 data의 return값 없이 성공 여부만 알려주는 call이 돌아옴 -> 돌아오면 CPU는 다른 일을 처리함 -> 동시에 내려갔던 call은 H/W까지 내려가 요청한 일을 처리함 -> 작업이 완료되면 interrupt로 알려줌
- 자바의 리스너
모두 I/O의 완료는 인터럽트로 알려준다.
DMA(Direct Memory Access)
기존에는 CPU가 controller를 통해 device에게 data를 요청하면 data를 CPU가 받아서 Memory에 올리는 작업을 했다. 하지만 CPU라는 비싼 자원을 더 효율적으로 사용하고 빠른 입출력 장치를 메모리에 가까운 속도로 처리하기 위해 DMA를 사용한다.
DMA : Memory copy를 전담으로 하는 작은 CPU
DMA를 사용한 data copy 과정 :
CPU가 DMA에게 data를 요청한다 -> 반복 : (DMA가 controller를 통해 device(HDD)에게 data copy를 요청한다 -> HDD에서 data를 읽어 Main Memory에 copy한다.)
- CPU는 DMA에게 1번 명령하고 DMA가 data copy를 반복수행하여 실행한다.
- CPU의 중재 없이 device controller가 device의 buffer storage의 내용을 메모리에 block 단위로 직접 전송한다. (처리는 조각 조각)
- DMA는 data copy를 하나씩 처리하고 CPU에게는 data 조각들의 묶음 단위인 블럭(block)단위로 인터럽트를 발생시켜 알려준다.
Memory Mapped I/O
Memory Mapped I/O는 마이크로프로세서(CPU)가 입출력 장치를 접근할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식이다. -위키피디아-
- CPU는 파일을 메모리에서 접근 가능하게 되어 CPU가 명령을 수행하기 훨씬 수월해진다.
저장장치 계층 구조
-------------------------------- (fast, high cost)
Registers
Cache Memory
Main Memory
volatile
-------------------------
non-volatile
Hard Disk Drive
Optical Disk
-------------------------------- (slow, low cost)
프로그램의 실행(메모리 LOAD)
File System의 실행 파일을 실행하면 Physical memory에 프로세스가 올라간다. 그런데, 개별 프로세스는 code, data, stack의 virtual memory address space를 가지는데, 이것은 logical memory가 physical memory보다 커지는 것을 가능하게 해준다. Virtual memory 공간에 있는 데이터를 address translation을 통해 필요할 때 physical memory(DRAM, main memory)에 옮겨준다.
Kernel도 code,data,stack으로 이루어진 address space가 있는데, kernel address space는 시스템 전체를 관장하기 때문에 다른 프로세스와 달리 virtual memory를 가지지 않는다.
커널 주소 공간의 내용
Kernel의 Code 영역
- 커널이 수행될 때 커널 코드가 하드디스크에서 커널 코드 영역으로 복사된다.
- 시스템 콜을 위한 코드나 인터럽트 처리 코드(ISR)가 있다.
- 자원 관리를 위한 코드가 있다.
- 편리한 서비스를 제공한 코드가 있다.
Kernel의 Data 영역
- 프로세스가 실행되고 있을 때 이 프로세스를 컨트롤 하기 위한 여러가지 데이터들이 있는데 이것을 Process Control Block(PCB)가 커널의 data 영역에 만들어진다. (프로세스의 개수만큼 PCB가 만들어진다.)
- disk block : disk에 대한 정보, mem block : memory에 대한 정보, CPU block : CPU에 대한 정보가 들어있다.
- 커널의 data 영역에는 시스템을 운영하기 위한 data들이 있는 것을 볼 수 있다
Kernel의 Stack 영역
- 사용자 모드에서 발생하는 call stack은 프로세스의 stack에 저장되지만 모니터 모드(kernel 모드)에서 발생하는 call stack은 kernel stack에 저장된다.
- 예시 ) printf() 명령어 > 00 > 000 > 0000 > wirte() , 이 호출 프로세스의 write의 system call에서 여러가지 함수들이 실행되는데 이 과정에서 발생하는 call stack은 kernel stack에 저장된다.
사용자 프로그램이 사용하는 함수
함수
- 사용자 정의 함수
- 라이브러리 함수
- 커널 함수 (커널 함수 호출 = 시스템 콜)
참고)
- Ewha Woman Univ. Operating System (2023-1. Prof. JinWook Kwon)
'Computer Science > Operating System' 카테고리의 다른 글
[Operating System] 시스템 콜 & 프로세스 간 협력 (0) | 2023.04.03 |
---|---|
[Operating System] Thread (0) | 2023.03.30 |
[Operating System] 프로세스의 개념과 상태 (0) | 2023.03.28 |
[Operating System] 운영체제 - 정의, 목적, 분류, 예시 (0) | 2023.03.20 |