하드웨어 구성
프로세서(processor)
- 중앙처리장치(Central Processing Unit: CPU) 라고도 함
- 전원이 켜지면, 메모리의 첫부분(0번지) 또는 끝부분(0xffffffff) 내용을 읽어 실행함
프로세서의 기본구조
Control Unit
- 명령어를 해석하는 명령어 해석기(instruction decoder) , 제어 로직으로 구성됨
- 명령어를 읽고 실행을 위한 로직을 수행
ALU (Arithmetic and Logic Unit) ->명령어 처리
- 산술연산 : 덧셈, 뺄셈, 곱셈, 쉬프트 연산 등을 수행
- 논리 연산 : 논리 AND, OR, XOR, NOT, 보수 연산 등을 수행
- 연산 처리 후의 상태(+or- 인 상태 를 상태 레지스터(status register)에 저장함
버스
- 장치들의 데이터 흐름을 연결하는 데이터 통로
명령어 = CPU 기계어
레지스터 (데이터 저장)
프로세서 내에 일시적으로 데이터를 보관하고 ALU의 산술, 논리 연산을 위한 데이터 저장 장소
- 범용 레지스터 (general register) : 프로그램, 데이터 처리를 위한 레지스터
- 제어 레지스터 (control register) : 프로그램 제어, 프로세서의 제어를 위해 사용하는 레지스터, (예: PC, SP 레지스터)
- 상태 레지스터 (status register) : 프로세서의 산술 연산의 결과, 동작 모드 들을 나타내 는 레지스터
- 인덱스 레지스터 (index register) : 데이터 어드레싱, 데이터 처리를 위해 사용되는 레지스터
프로세스의 6가지 기능
프로세서의 모드(mode)
부트로드가 발동하면 모두 초기화 되기 때문에 0으로 초기화
0: 커널 모드
1: 사용자 모드
프로세서 모드(mode)
- 권한 수준(privilege level)이라고도 함
- 모드에 따라 프로세서가 실행할 수 있는 명령어들이 다르다.
- 일반적으로 상태 레지스터에 모드 비트가 있음.
모드의 종류
- 사용자 모드(user mode) : 제한된 명령어만 실행할 수 있는 상태
- 커널 모드(kernel mode, supervisor mode, privilege mode) : 제한없이 모든 명령어를 실행할 수 있는 상태
모드를 사용하는 이유:
- 응용 프로그램이 수행될 때는 프로세서의 모드를 사용자 모드로 설정하여 제한된 명령 어만 실행 (이유 : 시스템 보호를 위해서)
- 운영체제가 수행될 때는 프로세서의 모드를 커널 모드로 설정하여 제한 없는 권한으로 실행
- 성능 조절
프로세스 명령어 = 기계어 = 프로세서가 직접 실행할 수 있는 명령어
명령어 종류
- 데이터 처리 명령어 : add, subtract, multiply, shift, compare, etc 등이 데이터 처리 명령어. 레지스터 또는 메모리에 저장된 데이터를 조작하거나 비교하는 데 사용
- 데이터 이동 명령어 :
- 메모리에서 메모리로 이동(move),
- 메모리에서 레지스터로 이동 (load),
- 레지스터에서 메모리로 이동(store) 등. 데이터를 메모리와 레지스터 간에 이동시키는데 사용
- 실행 제어 명령어 : branch, conditional branch 등. 프로그램의 실행 흐름을 제어하고 조건에 따라 분기하는데 사용
- 특수 명령어 : 프로세서 모드 변경(비트 값을 바꾸기 위한 명령어 프로그램에서 변경 불가), 입출력 명령어. 프로세서의 동작을 제어하거나 I/O 장치와의 통신을 위해 사용
컴파일러: 고급언어 → 기계어
어셈블러: 어셈블리어 → 기계어
메모리 종류
메모리 - RAM : 전원이 인가되는 상태에서만 데이터를 유지 (volatile)
- DRAM : 메인 메모리. 느리고 안정적이지 않고 빽빽한 밀집도 가격이 싸고 용량이 크다.
- SRAM : 빠르고 안정적이며 적은 밀집도
메모리 - ROM : 전원이 없어도 데이터가 유지됨 (non-volatile)
- Mask ROM: 데이터 기록후 수정할 수 없다
- PROM : 제한된 횟수만큼 수정이 가능하다.
- EPROM: UV로 메모리 지운다 → 느리다 →자주변경 X → 초기 인프라 프로그램에 주로 사용
- EEPROM: 전기적 신호로 지운다 → 빠르다 → 자주 변경을 하는 데이터
상위 레벨은 가격은 비싸지만 빠르고, 하위 레벨로 갈수록 가격은 감소하지만 접근 시간은 증가함
CPU와 캐시, 메인 메모리 간의 전송은 운영체제의 수행없이 하드웨어적으로 이루 어지고, 디스크와 메인 메모리 간의 전송은 운영체제에 의해 이루어진다.
캐싱(Cashing)
사용중인 데이터를 느린 저장장치에서 빠른 저장장치로 바꿈
데이터가 필요할땐
- 캐시안에 데이터가 있는지 검사
- 만약 캐시안에 데이터가 없다면 캐시에 데이터 복사 후 사용
캐시의 크기는 한정적이다.
인터럽트 (interrupt)
CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것을 말한다
CPU가 처리할 인터럽트가 정해져 있음
인터럽트 유형
하드웨어 인터럽트 -> CPU에게 알림
- I/O 장치에서 입출력의 종료를 알림
- 타이머 장치에서 주기적으로 알림
소프트웨어 인터럽트(trap)
- 프로그램 오류: 0으로 나누기, 잘못된 주소 참조 (잘못된 pointer) 등
- 사용자의 서비스 요청 : 시스템 호출
인터럽트가 발생하면 CPU가 현재 하는일 중단하고 인터럽트 서비스 루틴( 운영체제 내부코드)을 수행한다.
인터럽트 벡터 ( 메모리의 주소)
각 인터럽트에는 번호가 할당되어 있다.
메인 메모리의 지정된 영역에서 각 인터럽트를 처리할 코드의 시작주소가 저장이 된다.
- 인터럽트 벡터: 서비스 루틴의 시작 주소
- 인터럽트 벡터 테이블: 인터럽트 벡터들이 저장되어있는 영역
컴퓨터 전원이 켜지면 OS는 인터럽트 벡터 테이블 값을 초기화 한다
인터럽트 처리과정
인터럽트 처리는 하드웨어 -> 소프트웨어 로 수행됨
- 하드웨어 인터럽트 발생:
- 하드웨어에서 외부 이벤트가 발생한다. 이벤트는 주로 입출력 장치, 타이머, 또는 하드웨어 에러와 같은 외부 소스에서 비동기적으로 발생할 수 있다.
- 현재 수행 중인 명령 중단:
- CPU는 현재 실행 중인 명령을 일시 중단하고, 인터럽트를 처리하기 위해 인터럽트 서비스 루틴(ISR)으로 제어를 넘긴다.
- 인터럽트 벡터 검색:
- 인터럽트 컨트롤러는 발생한 인터럽트의 유형에 해당하는 ISR의 주소를 인터럽트 벡터 테이블에서 찾는다.
- ISR 실행:
- CPU는 찾은 ISR의 주소로 이동하여 해당 루틴을 실행한다. 이 루틴은 해당 인터럽트를 처리하고, 필요한 작업을 수행합니다. 이 과정에서 하드웨어나 소프트웨어적인 처리가 이루어진다.
- 인터럽트 서비스 루틴 실행 완료:
- ISR이 실행을 마치면, CPU는 이전에 수행 중이던 작업으로 복귀한다. 이전에 수행 중이던 프로세스나 명령을 다시 재개한다.
- 인터럽트 완료:
- 인터럽트가 처리되었으므로, 시스템은 다시 정상적인 작업을 계속한다.
하드웨어적 처리
- 상태 레지스터 값을 저장
- 프로세서 모드를 커널 모드로 변경 (모드 비트를 변경)
- PC 레지스터 값을 저장
- 발생된 인터럽트의 벡터 값(ISR 주소)을 PC 레지스터에 저장 (OS 내의 인터럽트 서비스 루틴을 수행하게 됨)
소프트웨어적 처리 (OS가 수행함)
- CPU 레지스터들의 값을 저장 (메모리에 저장)
- 인터럽트 처리 코드를 수행
- CPU 레지스터 값을 복원 (저장된 값들을 CPU 레지스터에 load)
- 상태 레지스터 값을 복원 (프로세서 모드가 이전 모드로 변경됨)
- PC 레지스터 값을 복원 (인터럽트가 발생하여 중단된 곳으로 돌아가게 됨)
산술 논리연산을 수행하는 장치는 ALU이다.
프로세서의 산술 연산의 결과, 프로세서 동작모드를 저장하는 레지스터는 상태레지스터 이다.
프로세서의 모드 중에서 제한없이 모든 명령어를 할 수 있는 모드는 커널모드이다.
refresh가 필요한 RAM은 DRAM이다.
ROM의 한 종류로서 데이터를 삭제하고 기록할 수 있는 ROM은 EEPROM이다.
저장장치 계층을 구분하는 세가지 성질은 speed, non-volatilem,용량이다.
저장장치 계층의 저장장치 중에서 CPU와의 데이터 전송이 하드웨어적으로 이루어지는 것은 레지스터이다.
하드웨어 인터럽트의 예는 키보드나 마우스 같은 외부장치의 입력 인터럽트와 타이머 인터럽트가 있다.
소프트웨어 인터럽트의 예는 프로그램 오류와 시스템 호출등이 있다.
인터럽트가 발생하면 수행되는 운영체제 코드는 인터럽트 서비스 루틴(ISR)이다.
인터럽트 벡터 테이블이란 인터럽트 서비스 루틴의 주소를 저장하는 테이블