컴퓨터 시스템의 동작 원리
by Frinee이 글은 반효경 저 - "운영체제와 정보기술의 원리"를 공부하고 정리하여 작성하였습니다.
1. 컴퓨터 시스템의 구조
- 내부장치: CPU, 메모리
- 외부장치: 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등
- 각 하드웨어 장치에는 컨트롤러가 붙어 있다.
- 컨트롤러(Controller): 일종의 작은 CPU, 각 하드웨어 장치마다 존재하면서 이들을 제어함.
- 커널(kernel): 운영체제 중 항상 메모리에 올라가 있는 부분을 말함.
2. CPU 연산과 I/O 연산
- I/O 연산: 입출력 컨트롤러 담당
- 주요 연산: 메인 CPU가 담당
- 로컬버퍼(Local buffer): 장치 컨트롤러가 데이터를 임시로 저장하기 위한 작은 메모리
- 디스크나 키보드에서 데이터를 읽어오는 경우
- 컨트롤러가 장치에서 로컬버퍼로 읽어온다.
- 로컬버퍼에 데이터가 임시로 저장된 후 메모리에 전달한다.
- 컨트롤러가 작업을 마치면 인터럽트를 발생시켜 CPU 옆 인터럽트 라인에 보고
- CPU가 인터럽트 라인에 신호가 들어온 것을 확인
- 하던 작업을 중단하고 인터럽트 작업을 먼저 처리
- 이후 CPU는 다음 명령 수행
3. 인터럽트의 일반적 기능
- 운영체제 커널에는 인터럽트 처리루틴이 미리 프로그래밍되어 있음.
- 운영체제는 사용자 프로그램에 필요한 서비스를 제공함.
3.1. 인터럽트 발생 시 CPU가 하는 일
- CPU가 인터럽트 발생 시 수행하는 작업
- 디스크의 로컬버퍼에 있는 내용을 사용자 프로그램 메모리로 전달
- 해당 프로그램이 CPU를 할당받을 경우 다음 명령을 수행할 수 있음을 표시
- 하드웨어 인터럽트: 컨트롤러 등의 하드웨어 장치가 CPU의 인터럽트 라인을 세팅함
- 소프트웨어 인터럽트: 소프트웨어가 CPU의 인터럽트 라인을 세팅함.
- 인터럽트 벡터(Interrupt vector)
- 인터럽트 종류마다 번호를 정하여 번호에 따라 처리해야 할 코드 위치를 가리키고 있는 자료구조
- 운영체제가 갖고 있고 실제 처리코드는 인터럽트 처리루틴에서 정의됨.
3.2. 소프트웨어 인터럽트
- 트랩(trap)이라 불리고 대표적으로 예외상황(Exception)과 시스템 콜(System call)이 있다.
- 사용자 프로세스로부터 CPU 제어권이 운영체제에 이양되어 처리됨.
- 예외상황(Exception): 사용자 프로그램이 비정상적인 작업을 시도하거나 권한이 없는 작업을 시도한 경우 처리하기 위해 발생시키는 인터럽트
- 시스템 콜(System call): 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하려 할 때 운영체제에 요청하는 방법
4. 인터럽트 핸들링
- 인터럽트가 발생한 경우 처리해야 할 일의 절차를 말함.
- CPU 명령 실행 중에는 임시 기억장치인 레지스터를 활용함.
- 인터럽트 발생 시 레지스터값들이 지워져 CPU 내의 상태를 저장해야 함.
- 실행 중인 프로그램의 현재 상태(실행 중인 명령의 메모리 주소를 포함한 부가적인 정보) 저장함.
4.1. 프로세스 제어블록 (Process Conrtol Block: PCB)
- 운영체제는 현재 시스템 내에서 실행되는 프로그램을 관리하기 위해 두는 자료구조
- 프로그램마다 하나씩 존재하고 실행 중인 프로그램의 부분 정보를 저장
- 실행 중인 코드의 메모리 주소
- 레지스터값
- 하드웨어 상태 등
❗놀랍게도 오늘날의 운영체제는 인터럽트 발생 시에만 실행된다는 것이다.
정상 상태일때는 CPU가 일을 하고 있고 인터럽트 시에만 잠깐 제어권을 획득하는 것 뿐이다.
5. 입출력 구조
- 입출력(I/O)이란 컴퓨터 시스템이 컴퓨터 외부의 입출력 장치들과 데이터를 주고 받는 것을 의미
5.1. 동기식 입출력(synchronous I/O)
- 한 프로그램이 입출력 요청을 했을 때 입출력 작업을 완료한 후에 후속 작업에 들어서는 방식
- CPU의 느린 입출력 연산이 끝날 때까지 인터럽트를 기다리며 자원을 낭비하게 됨
- 그래서 입출력 수행을 하는 경우, CPU를 다른 프로그램에 이양하여 쉬지 않도록 해줌.
- 그리고 입출력 프로그램을 봉쇄 상태(blocked state)로 전환
- 입출력이 끝난 후, 운영체제 커널이 프로그램에 다시 CPU를 할당할 수 있도록 봉쇄 상태를 해제
- 다수의 입출력 요청이 올 경우
- 입출력의 동기화를 위해 큐(queue)를 두어 요청한 순서대로 처리할 수 있도록 함
5.2. 비동기식 입출력(Asynchronous I/O)
- 연산을 요청한 후에 CPU의 제어권을 입출력 연산을 호출한 그 프로그램에게 곧바로 부여하는 방식
- 읽어온 결과를 이용해서 다음 연산을 수행하는 경우, 입출력 완료 후 수행
- 입출력 연산과 무관한 작업이 있는 경우, 해당 작업을 먼저 수행
6. DMA
- CPU 외의 메모리 접근이 가능한 장치
- CPU가 입출력 장치들의 메모리 접근 요청으로 인해 인터럽트 빈도를 줄이는 역할
- 로컬버퍼에서 메모리로 읽어오는 작업을 대행함.
- 블록(block)이라는 큰 단위로 정보를 메모리로 읽은 후에 CPU에 인터럽트를 발생시켜 해당 작업의 완료를 알려 줌
7. 저장장치의 구조
- 주기억장치: 메모리, 보통 휘발성의 RAM을 사용
- 보조기억장치: 플래시 메모리, CD, 마그네틱 테이프 등, 비휘발성의 마그네틱 디스크 사용
7.1. 보조기억장치
- 용도
- 파일 시스템용: 전원이 없는 상태에서 유지해야 하는 정보를 파일 형태로 저장
- 스왑 영역(Swap area): 메모리의 크기가 한정되어 공간이 부족한 경우 디스크 스왑 영역에 저장, 하드디스크가 가장 널리 사용
- 하드디스크
- 보조기억장치 중 가장 대표적인 저장매체
- 여러 개의 마그네틱 원판이 있고 암(arm)이 이동하며 원판에 저장된 데이터를 읽고 씀
- 디스크 원판의 표면은 트랙(track)으로 나뉘고, 각 트랙은 섹터(sector)로 나뉨
8. 저장장치의 계층 구조
- 빠른 저장장치부터 느린 저장장치까지 단계적인 계층 구조를 이룸
- 빠른 저장장치: 단위 공간당 가격이 높아 저용량을 사용
- 느린 저장장치: 가격이 저렴하여 대용량을 사용, 접근속도가 느림
- 상위 저장장치 계층으로 갈수록 접근 속도는 빠르고 용량은 상대적으로 적음
- 캐싱 기법을 사용하면 적은 용량을 사용해도 대용량 만큼의 성능을 낼 수 있음
8.1. 캐싱 기법
- 상대적으로 용량이 적은 빠른 저장장치를 이용해 느린 저장장치의 성능을 향상시키는 총체적 기법
- 상대적으로 느린 저장자치 내용 중 당장 사용되거나 자주 사용되는 정보를 빠른 저장장치에 선별적으로 저장하여 속도 차이를 완충시킴
9. 하드웨어의 보안
- 어떤 프로그램이 다른 프로그램의 실행을 방해하거나 충돌을 일으킬 수 있기 때문에 보안 기법이 필요함
- 운영체제는 커널모드(kernel mode)와 사용자 모드(user mode)를 지원하여 보안성을 확보
- 커널모드
- 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드
- 모든 종류의 명령을 다 실행할 수 있음.
- 사용자모드
- 일반 사용자 프로그램이 실행되며 제한적인 명령만 수행
- 모드비트(mode bit): 사용자 프로그램을 감시하기 위해 설정한 비트(0: 커널모드, 1: 사용자 모드)
- 사용자 프로그램이 보안적으로 중요한 명령을 수행할 때 시스템 콜을 통해 운영체제에 해줄 것을 요청함
- 운영체제가 요청된 작업을 마친 후 모드비트를 1로 만들어 사용자 프로그램에게 넘겨줌
※ 입출력 명령은 특권 명령이기 때문에 운영체제가 항상 담당함.
10. 메모리 보안
- 여러 프로그램이 메모리에 동시에 올라와서 다른 프로그램 영역을 침범하는 경우가 있어 보안이 필요함.
- 2개의 레지스터를 사용하여 프로그램이 접근하려는 메모리 부분이 합법적인지를 확인함
- 기준 레지스터: 프로그램이 수행되는 동안 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 주소 최소값을 보관
- 한계 레지스터: 그 프로그램이 기준 레지스터값부터 접근할 수 있는 메모리의 범위 정보 보관
- “기준 레지스터 ≤ 논리적 주소 ≤ 기준 레지스터 + 한계 레지스터”의 영역일때만 접근이 가능
- 벗어날 경우 예외상황 인터럽트를 발생시킴.
- 다만, 한 프로그램이 메모리 한 영역에 연속적으로 위치하는 단순화된 메모리 관리 기법에서만 가능한 기법
- 메모리 접근 명령은 특권명령이 아니지만, 2개의 레지스터값을 설정하는 연산은 특권명령으로 규정
11. CPU 보호
- CPU가 하나의 프로그램에 의해 독점되는 것을 막기 위해 타이머(timer) 하드웨어를 사용
- 타이머는 정해진 시간이 지나면 인터럽트를 발생시켜 운영체제가 CPU의 제어권을 획득하게 함.
- 로드 타이머(load timer): 타이머 값을 세팅하는 명령, 이것도 특권명령
- 타이머는 시분할 시스템에서 시간 계산을 위해 사용
12. 시스템 콜을 이용한 입출력 수행
- 입출력 명령은 운영체제에게 시스템 콜이라는 대행 요청을 통해 수행됨
- 시스템 콜을 한 경우 트랩이 발생해 CPU 제어권이 운영체제로 넘어가게 됨
- 이후 운영체제는 시스템 콜을 처리하기 위한 루틴으로 가 명령을 수행
- 명령을 수행한 후 CPU에 인터럽트를 발생시켜 알리고 해당 프로그램이 CPU를 할당받을 수 있도록 함.
자료
- 운영체제와 정보기술의 원리 (반효경 저, 2020.5)
'[컴퓨터 과학자 스터디] > 운영체제' 카테고리의 다른 글
CPU 스케줄링 (0) | 2024.10.27 |
---|---|
프로세스 관리 (0) | 2024.10.22 |
프로그램의 구조와 실행 (0) | 2024.10.21 |
운영체제 개요 (1) | 2024.10.11 |
컴퓨터 및 정보기술의 역사 (1) | 2024.10.11 |
블로그의 정보
프리니의 코드저장소
Frinee