CPU
는 memory
에 담긴 instruction
을 시행한다.
이 때 CPU
에는 memory
에 담긴 instruction
을 가리키는 programm counter
라는 register
가 존재한다.
해당 명령이 시행 된 이후에 programm counter
는 주소를 다음 instruction
의 실행 주소를 가리킨다.
대부분
memory
에 담긴insruction
은4byte
이기 때문에 명령이 실행되면programm counter
의 주소를 +=4byte
대부분 instruction
을 순차적으로 진행하지만 만약 프로그램 내에서 함수
가 존재할 경우 다양한 곳에 있는 instruction
을 실행하기도 한다.
CPU
는 instruction
을 실행하고 interrupt line
에 interrupt
가 존재하는지 확인하고 이동한다.
interrupt line
별로 실행해야 하는 함수가 존재하며 이를 ISR , interrupt Service Routine
이 존재하며 그런 함수들을 interrupt vector
들이 가리키고 있음
mode bit
은 CPU
가 OS
에 있어서 모든 명령을 실행 할 수 있는지, 프로그램
에 있어서 제한된 명령만을 실행할 수 있는지를 구분 짓는 값이다. (0 : OS , 1: 사용자 프로그램
)
mode bit
이 0
일 때만 I/O device
만 접근 할 수 있다. 그렇기 때문에 프로그램
이 I/O device
에 접근하기 위해서는 mode bit 이 0일때에만 가능, 이는 CPU 가 OS 에 할당
되어 있어야 한다.
그렇기 때문에 프로그램
에서 I/O device
에 접근하기 위해선 interrupt line
에 interrupt
를 보내는 system call
을 보내고 OS
가 I/O device
에 접근한다.
Interrupt 종류
Interrupt
: 하드웨어가 발생시킨 인터럽트 (ex : I/O device)
Trap
: 소프트웨어가 발생시킨 인터럽트
-Exception
: 프로그램의 오류로 인해 발생한 인터럽트
-System call
: 프로그램이I/O device
에 접근하기 위한 인터럽트
동기식 입출력
I/O
요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에게 넘어감I/O
요청이 끝날 때 까지 (인터럽트가 올 때 까지) 요청을 보낸 프로그램은 실행이 멈춰있음I/O
도 하나가 실행 후 완료되어야 다른 I/O
작업을 하기 때문에 한 번에 하나의 I/O
만 실행이 가능하다는 단점이 있다.CPU
가 낭비되기 때문에 기다리고 있는 프로그램을 제외하고 다른 프로그램을 실행하는 방법이 있다.I/O
도 동시에 실행 할 수 있다.비동기식 입출력
I/O
요청 후 작업이 끝나기 전까지 요청과 상관 없이 작업을 실행하고 있음 interrupt
가 들어오면 해당 작업을 시행함두 경우 모두
I/O
의 완료는 인터럽트로 알려준다.
DMA (Direct memory Access)
매 I/O device
의 작은 일들이 있을 때 마다 CPU
에 interrupt
를 주는 것은 너무 비효율적이기 때문에 메모리에 직접적으로 접근 할 수 있는 장치
DMA
로 직접적으로memory
에 접근한 이후 작업이 완료 되었음을CPU
에 알려주면서Interrupt
를 한 번 건다.
일반적인 I/O
CPU
는 메모리에 접근하는 instruction
이 있고 (roadster
) I/O device
에 접근하는 instruction
이 존재한다.
Memory mapped I/O
I/O
장치도 memory
에 연장주소로 붙인 후 I/O
에 접근 할 수 있는 instruction
도 실행한다.
ex : memory 에 0~100번까지는
memory
에 접근하는instruction
아면 1000번 이후의instruction
은I/O
에 접근 하도록 함
전원이 꺼진다고해서 HDD 의 내용이 사라지지 않지만 메모리에 담긴 내용은 휘발된다.
primary
는 CPU
가 직접적으로 접근 가능하며 secondray
에는 접근이 불가능하다. (excutable
하냐 못하냐)CPU
에서 접근이 가능하려면 byte
단위로 접근 할 수 있어야 한다.primary
에는 몇 클럭 안에 가능하며 secondary
는 적게는 몇 십, 많게는 몇 백 클럭만에 접근 가능하다.cache memory
가 존재한다.
Caching
빠른 매체로 정보를 읽어들여서 쓰는 것을
Caching
이라고 한다.
Caching
은 재사용을 위해 사용한다.
이미 읽어온 데이터를Cache memory
에 저장해두고 또 느리게 읽어올 필요 없이Cache memory
에서 빠르게 읽어온다.
대부분의 프로그램은 file system
형태로 실행 파일이 존재하고 물리적인 메모리에 담겨 process
가 된다.
물리적인 메모리에 담기기 전 가상 메모리
에 담기게 된다.
Virtual memory
)가상 메모리의 메모리 주소공간 (address space)
안에 프로그램 별 독자적인 메모리 주소가 담긴다.
가상 메모리에 주소가 담길 때 stack , data ,code
형태가 담긴다.
code
: 프로그램을 실행 할 code
data
: 프로그램에서 사용하는 자료구조들이 담긴다.stack
: 코드가 함수구조로 되어있기 때문에 함수를 호출하거나 리턴 할 때 데이터를 담을 자료구조커널의 주소 공간은 물리적인 메모리에 항상 존재한다.
효율적인 메모리 관리를 위해서 물리적인 메모리에 주소 메모리를 모두 올려두는게 아니다.
내가 실행하고자 하는 코드의 주소만을 메모리에 올려두고, 사용 한 이후에는 메모리에서 쫒아낸다.
실행하고자 하지 않는 주소 공간
은 swap area
라고 불리는 HDD
에 담아둔다.
File System
과Swap area
의 차이
File System
은 프로그램에 대한 정보를 비휘발적으로 영구적으로 저장
Swap area
는 물리적인 메모리의 효율적인 관리를 위하여 가상 메모리의 정보들을 담아둔다.
Address tranlation
)물리적인 메모리도 0번지부터 시작하는 주소이다.
가상 메모리의 주소는 다른 번지에 존재하는데 물리적인 메모리에 들어갈 때는 물리적인 메모리에 맞게 주소를 맞춰서 들어가야 한다.
이러한 주소를 변환해주는 계층이 존재하는데 이런 계층을 주소 변환 계층이라고 한다.
이건 하드웨어가 기능하며 이건 추후에 한다.
OS
) 주소 공간의 내용시스템콜
, 인터럽트
)운영체제가 사용하는 여러 자료구조들이 정의되어 있다.
하드웨어들을 직접 관리하기 위해 하드웨어 종류 별로 자료구조를 만들어서 관리 한다.
소프트웨어인 프로세스
들을 관리하기 위한 자료구조도 담아둔다.
어떤 프로그램이 CPU를 얼마나 쓰는지, 어떤 프로그램에 CPU 를 할당 할 것인지를 결정하기 위해 PCB (
process control block
) 형태의 자료구조로 관리한다.
OS
도 함수로 이뤄져있기 때문에 프로세스
들의 함수에 따른 관리를 위해 프로세스 별 커널 스택이 존재한다.
우리가 사용하는 모든 프로그램은 함수
로 이뤄져있다.
어떤 프로그램이 되든 compile
이후 함수
로 이뤄진다.
사용자 정의 함수
: 내가 직접 정의한 함수라이브러리 함수
: 누군가가 이미 만들어뒀으며 유용하여 사용하는 함수 어떤 함수든 complie 된 프로세스의
code
에 존재한다.
커널 함수
: 운영 체제 프로그램의 함수커널
에서 정의된 함수이다.커널 함수
를 호출하기 위해선 프로세스 가상메모리
가 아니라 커널 가상 메모리
에서 호출하여 사용해야 한다.프로세스에서 커널 함수를 이용하기 위해서는
system call
을 이용하여OS
에 접근해야 한다.
위 이미지는 A
라는 프로세스가 실행되는 과정을 보인것이다.
첫 번째 단계에서는 사용자 정의 함수 or 라이브러리 함수
를 호출하는 단계이다.
user mode
: CPU 가 사용자 정의 프로그램을 사용하고 있는 동안을user mode
라고 한다.
두 번째 단계는 A
에서 커널 함수
를 실행했을 경우이다. 커널 함수
에 접근하기 위해선 system call
이후 커널 모드
에 들어가 커널
에 접근해야 한다.