[CS] DMA와 서로 다른 입출력 명령어, 저장장치 계층 구조 등과 같은 전반적인 운영체제에 대한 나름의 이해

2023. 10. 18. 00:08CS

DMA는 Direct Memory Access로 입출력과 메모리를 직접적으로 연결해주는 역할을 한다. 바이트 단위가 아닌 블록 단위로 인터럽트를 시킨다.

서로 다른 입출력 명령어란 입출력에 대한 명령어를 따로 설정할 수도 있고 아니면 메모리 명령어로도 쓸 수 있다는 것이다. 후자의 경우 입출력 장치도 하나의 메모리 영역에 있다고 보는 것이다. 

저장장치 계층 구조란 저장장치의 속도 차이 때문에 만들어진 것이다. 속도가 빠른 것은 크기가 작고 비용이 크다. 계층구조에서 상위를 차지하고 속도가 느린 것은 반대이다. 순서대로 레지스터, 캐시 메모리, 메인 메모리가 프라이머리 구조를 이루고 하드디스크가 세컨더리 구조를 이룬다. 프라이머리 계층은 CPU가 직접 접근이 가능한 계층이고 세컨더리는 그게 아니다. 캐싱은 속도가 더 빠른 스토리지에 복사하는 것을 의미한다. 

프로그램 실행은 곧 메모리에 올라가는 것이다. 이때 프로세스마다 코드, 힙, 스텍, 데이터 영역을 받는다. 이것을 가상메모리 또는 로지컬 메모리라고 한다. 하지만 실제 피지컬 메모리에 이 모든 게 올라가는 것도 아니고 연속적으로 올라가는 것도 아니다. swapping을 통해서 덜 중요한 데이터들은 swap area에 가게 된다. virtual memory에서 피지컬 메모리로 매핑될때 어드레스 트랜스지션을 거친다. 이는 하드웨어를 통해 구현이 된다. 하드디스크는 목적에 따라 swapping과 파일 시스템으로 사용이 된다. 

운영체제 커널의 코드, 데이터, 스택의 예로 코드는 시스템콜과 같은 함수의 코드를 가지고 있고 데이터는 프로세스에 대한 정보 등과 같은 변수를 담고 있고 스택은 각각 프로세스마다 시스템콜이라는 함수를 호출하게 되었을 때 생기는 지역변수를 관리한다.

저급언어에서도 함수라는 컨셉은 사용되는데 크게 세가지로 구분된다.

사용자 정의 함수, 라이브러리 함수, 커널 함수이다. 라이브러리 함수는 그대로 가져와서 쓰는 함수이고 커널 함수는 시스템 콜과 같은 함수이다. 유저 프로세스에서 직접적으로 커널의 함수 주소로 갈 수는 없다. 왜냐하면 가상메모리가 이를 방지하기 떄문이다. 가상 메모리는 자신의 프로세스에 대한 주소로만 갈 수 있다. 따라서 시스템콜을 사용하기 위해서는 OS에 제어를 넘겨야 한다.

프로세스는 유저모드와 커널모드를 왔다갔다하며 종료된다.

 

Reference


https://core.ewha.ac.kr/publicview/C0101020140314151238067290?vmode=f

 

반효경 [운영체제] 4. System Structure & Program Execution 2

설명이 없습니다.

core.ewha.ac.kr