일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- web
- UX
- vercel
- 프로그래머스
- level1
- 자바스크립트
- 백준
- 30daysdowoonchallenge
- REST_API
- javascript
- 큐
- useState
- mysemester
- 카카오
- 회고
- 생활코딩
- Til
- 자료구조
- 코드스테이츠
- Next.js
- redux
- 스택
- 해시테이블
- React
- CSS
- UI
- superstarjypnation
- 프로토타입
- html
- 운영체제
- Today
- Total
데굴데굴
02. 컴퓨터 시스템의 동작 원리 본문
반효경 교수님의 KOCW 강의 '운영체제'와 저서 '운영체제와 정보기술의 원리'를 학습하며 정리한 글입니다.
컴퓨터 시스템의 구조
컴퓨터 = 내부 장치(CPU, 메모리) + 외부 장치(디스크, 키보드, 마우스, 모니터, 네트워크 장치)
컴퓨터 내부로 데이터가 들어오는 것 = input
외부로 데이터가 나가는 것 = output
각 하드웨어 장치에는 이들을 제어하는 일종의 작은 CPU인 컨트롤러가 붙어있음
운영체제의 코드를 전부 메모리에 상주시키면 메모리가 낭비됨 -> 핵심적인 부분만 올려놓음 (=커널)
CPU 안에는 레지스터, mode bit, interrupt line이 있음
레지스터: CPU 내부의 임시 기억 장치, 새 명령을 수행할 때마다 초기화됨.
mode bit: 사용자 프로그램의 잘못된 수행으로 다른 프로그램 및 운영체제에 피해가 가지 않도록 하기 위한 보호 장치
- 0일 때: 모니터 모드(커널 모드, 시스템 모드), 운영체제 코드가 실행 중일 때
- 1일 때: 사용자 모드, 사용자 프로그램이 cpu를 가지고 있을 때 (제한된 instruction만 수행 가능)
CPU 연산과 I/O 연산
연산을 한다 = CPU가 무언가 일을 한다.
CPU는 아주 빠른 일꾼으로 생각하면 된다.
로컬 버퍼 local buffer: 각 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리, 컨트롤러에 있음
ex. 디스크나 키보드 등에서 데이터를 읽어오는 경우
- 컨트롤러가 장치에서 로컬 버퍼로 읽어옴
- 로컬 버퍼에 데이터가 임시로 저장된 후 메모리에 전달
- 인터럽트를 발생시켜 CPU에 보고
- CPU에서 명령 수행
인터럽트의 일반적 기능
CPU는 명령 하나를 수행할 때마다 interrupt line을 확인
인터럽트가 있으면 인터럽트부터 수행한다.
인터럽트 처리루틴/인터럽트 핸들러: 다양한 인터럽트에 대해 각각 처리해야 할 업무들을 정의한 것
인터럽트 벡터: 인터럽트 종류마다 번호를 매겨 번호에 따라 처리해야 할 코드의 위치를 가리키는 자료구조
- 하드웨어 인터럽트: 컨트롤러 같은 하드웨어 장치가 발생시키는 인터럽트
- 소프트웨어 인터럽트 (trap)
- exception: 사용자 프로그램이 오류를 범한 경우 (0으로 나누는 등의 비정상적인 작업을 한 경우 etc.)
- system call: 사용자 프로그램이 커널 함수를 호출하는 경우
인터럽트 핸들링
인터럽트를 처리하려면 그 전에 진행하던 작업을 저장해둬야 함 -> PCB (Process Control Block)
PCB는 각각의 프로그램마다 하나씩 존재.
저장하는 정보: 프로그램이 실행 중이던 코드의 메모리 주소, 레지스터값, 하드웨어 상태
인터럽트 작업이 끝나면 다시 PCB에서 정보를 빼와 하던 작업을 하는 방식
오늘날의 컴퓨터에서 운영체제는 인터럽트가 발생할 때에만 실행
운영체제가 직접 CPU를 점유하는 경우는 인터럽트에 의해서만 가능하다.
입출력 구조
- 동기식 입출력(synchronous I/O)
- 입출력 요청이 들어오면 그 입출력 작업이 완료된 후에야 후속 작업을 진행할 수 있는 방식
- 다음 명령을 수행하지 않고 기다림 -> 입출력 연산이 끝날 때까지 기다리며 자원을 낭비함
- 따라서 일반적으로 입출력 작업을 실행하던 프로그램은 cpu 할당을 해제하고 다음 프로그램에 권한을 부여한다.
- 입출력 요청의 동기화를 위해 장치별로 큐를 두어 순서대로 처리
- 비동기식 입출력(asynchronous I/O)
- 입출력 연산 요청 후 연산이 끝나기를 기다리지 않고 곧바로 그 프로그램에 cpu 제어권을 부여하는 방식
- 입출력에서 받아온 데이터를 바로 활용할 필요가 없을 때 채택
- ex. 읽어오는 요청이 아니라 디스크에 쓰는 요청일 때
DMA (Direct Memory Access)
i/o 장치가 인터럽트를 너무 많이 걸어 cpu가 방해받음, 효율성이 떨어짐
-> DMA controller
Direct Memory Access
직접 메모리에 접근할 수 있는 컨트롤러
cpu가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트받는 것을 막아줌
DMA는 블록 단위로 데이터를 읽어온다.
저장장치의 구조
- 주기억장치
- 메모리
- RAM(전원이 나가면 저장된 내용이 사라짐)을 매체로 사용
- 보조기억장치
- 마그네틱 디스크(전원이 나가도 저장된 내용 기억)
- 용도에 따라 두 가지로 구분 가능
- 파일 시스템용: 파일 형태로 보조기억장치에 저장
- 스왑 영역용: 메모리 공간이 부족할 때 당장 필요하지 않은 부분을 올려놓는 영역 (swap out)
- 메모리의 연장 영역
- 하드디스크가 널리 사용됨
저장장치의 계층 구조
빠른 저장장치부터 느린 저장장치까지
빠른 저장장치: 단위 공간당 가격이 높고 용량이 적음
느린 저장장치: 가격이 저렴, 대용량, 접근 속도 느림
휘발성, 비휘발성 영역으로 구성
윗 부분은 바이트 단위
밑 부분은 섹터 단위
상위 영역에 당장 필요한 정보만을 저장하면 하위 영역의 큰 용량 저장장치를 사용하는 것과 같은 효과를 낼 수 있음
빈번히 쓰이는 정보를 빠른 저장장치에 선별적으로 저장 (캐싱) -> 접근 시간 절약 가능 -> 성능 향상
하드웨어의 보안
커널 모드: 운영체제가 CPU의 제어권을 가지고 운영체제 코드를 실행하는 모드
사용자 모드: 일반 사용자 프로그램이 실행됨. 제한된 명령만 실행 가능
-> mode bit이 감시
특권명령: 시스템의 보안과 관련된 명령
모든 입출력 명령은 특권명령으로 규정
메모리 보안
2개의 레지스터 (기준 레지스터 base register, 한계 레지스터 limit register)
프로그램이 접근하려는 메모리 부분이 합법적인지 체크
- 기준 레지스터 base register
- 어떤 프로그램이 실행될 때 그 프로그램이 합법적으로 접근할 수 있는 메모리상의 가장 작은 주소 보관
- 한계 레지스터 limit register
- 그 프로그램이 기준 레지스터값부터 접근할 수 있는 메모리의 범위를 보관
메모리 접근 연산이 있을 때마다 합법적인 범위에 있는지 체크
범위에서 벗어나면 소프트웨어 인터럽트 중 exception에 해당하여 인터럽트 발생
한 프로그램이 메모리의 한 영역에 연속적으로 위치하는 단순화된 메모리 관리 기법에만 해당되는 설명임.
커널 모드에서는 메모리에 무제한 접근 가능
CPU 보호
무한 loop 등으로 특정 프로그램이 cpu를 독점하지 않도록
타이머 = 정해진 시간이 지나면 인터럽트를 발생시키는 하드웨어
일정 시간 단위로 세팅 가능
매 클럭 틱마다 1씩 감소
타이머의 값을 세팅하는 명령 = 로드 타이머 load timer
시분할 시스템에서 현재 시간을 계산하기 위해서도 사용
시스템 콜을 이용한 입출력 수행
입출력 명령은 특권 명령
사용자 프로그램이 직접 수행 불가
운영체제에 시스템 콜 system call을 하여 입출력 수행
인터럽트로 입출력 완료 알리고 다시 cpu 권한을 부여받는다
'CS > 운영체제' 카테고리의 다른 글
04. 프로세스 관리 - 3 (0) | 2023.06.27 |
---|---|
04. 프로세스 관리 - 2 (0) | 2023.06.25 |
04. 프로세스 관리 - 1 (0) | 2023.03.19 |
03. 프로그램 구조와 실행 (0) | 2023.03.12 |
01. 운영체제 개요 (0) | 2023.03.10 |