필수장치: 중앙처리장치(CPU), 메인 메모리(RAM)
주변장치: 입력장치, 출력장치, 저장장치
CPU(central processing unit)
: 명령어를 해석하여 실행하는 장치. 두뇌와 같은 역할
RAM(random acces memory)
: 작업에 필요한 프로그램과 데이터를 저장하는 장소
바이트 단위로 분할되어 있으며 분할 공간마다 주소로 구분
전원이 꺼지면 데이터도 사라짐
입출력 장치
입력장치
: 외부의 데이터를 컴퓨터에 입력하는 장치
출력장치
: 컴퓨터에서 처리한 결과를 사용자가 원하는 형태로 표현하는 장치
저장장치
: 메모리보다 느리지만 저렴하고 용량이 큼(저장 용량에 비해 가격이 싸기 때문)
전원이 꺼져도 데이터를 영구적으로 저장
<종류>
- 자성 이용 : 플로피 디스크,하드디스크드라이브/HDD
- 레이저 이용 : CD,DVD 등
- 비휘발성 * 플래시 메모리(속도빠름) 이용 : USB,SD카드,CF카드,SSD/솔리드 스테이트 드라이브 등
메인보드
: cpu와 메모리 등 다양한 부품을 연결하는 커다란 판
다양한 장치들을 bus(데이터가 지나다니는 통로)로 연결
<폰 노이만 구조>
- 현대의 컴퓨터 구조 : cpu, 메모리, 입출력장치 ,저장장치를 버스로 연결
- 프로그램 실행 시 특징 : 프로그램은 저장장치에 보관됨
- 프로그램은 메모리에 로딩돼야 실행 가능(저장장치에서 바로 실행 불가)
- 메모리가 유일한 작업공간 → 메모리 관리가 중요
- 프로그램이 메모리에서 실행 → 프로세스
메모리 용량이 부족하면 컴퓨터가 느려지는 이유
: 데이터를 모두 가져올 수 없음. 저장장치에서 가져오는 횟수가 늘어남
용량 부족 시, 저장장치의 가상메모리를 사용하는데 저장공간 부족으로 가상메모리를 사용할수 없게됨
<컴퓨터 관련 기초 용어정리>
크기단위
비트(bit) : 데이터의 기본단위
바이트(byte) : 8bit
단위 | 표기 | 이진크기 |
바이트 | b | 1 |
킬로바이트 | kb | 2^10 |
메가바이트 | mb | 2^20 |
기가바이트 | gb | 2^30 |
테라바이트 | tb | 2^40 |
페타바이트 | pb | 2^50 |
클럭 (clock) : cpu가 한번의 연산을 수행하는 최소단위
- clock tick : 1클럭에 필요한 시간의 기본단위
- pulse: 하나의 클럭 사이클에서 발생하는 전압의 상승과 하강
헤르쯔 (HZ) : 1초에 몇 번의 클럭이 발생하여 작업을 수행했는가(cpu의 클럭속도)
cpu의 성능을 나타내는 단위와 유사
성능 비교 요소) 코어의 개수, 프로세서 아키텍쳐(내부설계)
시스템 버스
: 메모리와 주변장치를 연결
FSB (Front side bus)혹은 전면 버스라고 부름
CPU버스
: CPU내부의 다양한 장치를 연결
BSB(bus side bus)혹은 후면 버스라고 부름
BSB속도는 CPU클럭과 같고 FSB보다 훨씬 빠름
<프로그래밍과 언어>
프로그래밍 : 컴퓨터 프로그램을 만드는 것(프로그래밍에 사용하는 언어가 프로그래밍 언어)
기계어 : 컴퓨터가 직접적으로 이해할 수 있는 언어 . 0과 1로 이루어져 사람이 이해하기 어려움
어셈블리어 : 기계어를 사람들이 이해할 수 있는 문자 형태로 변환한 최초의 프로그래밍 언어
저급언어(low level language)
: 기계어는 아니지만 일반인이 사용하기 어려운 언어 ex)어셈블리어
고급언어(high level language)
: 일반인이 이해할 수 있는 단어와 문법으로 만든 언어
기계어와 어셈블리어를 제외한 대부분의 언어 ex) python c언어
컴파일 : 고급언어를 기계어로 번역하는 과정 인터프리터보다 속도가 빠르다
소스코드를 번역하여 기계어로 이루어진 실행파일을 생성(바이너리 파일 생성) ex) C언어
인터프리터(interpreter) :한줄씩 실행 소스코드를 한번에 한 문장씩 기계어로 번역하여 실행
실행 파일을 따로 만들지 않음. 코드에 잘못된 부분이 있는지 파악하기 어려움. 반복작업을 하나로 합치기 어려움
ex) 자바스크립트
컴파일러의 목적
- 오류 발견: 소스코드에서 오류를 발견하여 실행 시 문제를 배제하는 것
- 코드 최적화:소스코드를 간결하게 정리하여 실행 속도를 빠르게 하는 것
컴파일 과정
1) 소스코드 작성 및 컴파일(오류 발견과 코드 최적화)
2) 목적 코드(object파일)와 라이브러리 연결
3) 동적 라이브러리를 포함하여 최종 실행
스택: 가장 나중에 들어온 자료가 가장 먼저 처리됨(FILO:first in last out)
순서가 뒤집혀서 나오고 한쪽으로만 입출력이 이루어짐
큐:먼저 들어온 자료가 먼저 처리됨(FIFO:first in first out)
한쪽으로 자료를 넣으면 반대쪽으로 나오는 구조
<cpu의 구성>
산술논리 연산장치(arithmetic and logic unit ALU)
산술연산: 데이터의 사칙연산
논리연산: AND ,OR
제어장치(control unit)
: cpu에서 작업을 지시하는 부분
레지스터(register)
: 작업에 필요한 데이터를 cpu내부에 임시로 보관하는 장소. 메모리보다 빠르지만 용량은 작다
<레지스터의 종류>
일반레지스터
데이터 레지스터(data register DR)
: 메모리에서 가져온 데이터를 임시보관 일반레지스터 또는 범용 레지스터라고도 함
주소 레지스터(address register AR)
: CPU가 데이터나 명령어가 저장된 메모리를 접근하고자 할때의 주소를 저장. CPU 내부에 위치
특수 레지스터
프로그램 카운터(program counter PC)
: 다음에 실행할 명령어의 주소를 기억했다가 제어장치에 알려줌. 명령어 포인터라고도 함
명령어 레지스터(instriction register IR)
: 현재 실행 중인 명령어를 저장
메모리 주소 레지스터(memory address register MAR)
: cpu와 메모리 사이의 인터페이스에 위치 <-> 주소 레지스터와 구분
메모리 관리자가 데이터를 메모리에서 읽거나 쓰려 할 때의 주소를 지정
메모리 버퍼 레지스터(memory buffer register MBR)
: 메모리에서 가져오거나 옮겨갈 데이터를 임시로 저장
항상 메모리 주소 레지스터와 함께 동작함
<버스의 구성>
버스 | 특징 |
제어 버스 | 제어장치와 연결된 버스로 cpu가 메모리와 주변장치에 제어 신호를 보내기 위해 사용한다 메모리와 주변 장치에서도 작업이 완료되거나 오류가 발생하면 제어 신호를 보내기 떼문에 양방향이다 |
주소 버스 | 메모리 주소 레지스터와 연결된 버스로 데이터를 읽거나 쓸 때 메모리나 주변장치에 위치 정보를 보내기 위해 사용하며 단방향이다 |
데이터 버스 | 메모리 버퍼 레지스터와 연결된 버스로, 데이터의 이동이 양방향으로 이루어진다 |
워드(word)
: cpu가 한번에 처리할 수 있는 데이터의 최대 크기
32bit cpu에서는 32bit/ 64bit cpu에서는 64bit (워드 크기에 맞는 운영체제를 설치하여 사용)
버스의 대역폭(bandwidth) =워드의 크기
:한번에 전달할 수 있는 데이터의 최대 크기
버스의 대역폭=레지스터의 크기=메모리에 한번에 저장할 수 있는 데이터의 크기= 워드
<휘발성 메모리>
DRAM(dynamic ram)
: 저장된 데이터가 일정 시간이 지남에 따라 전기가 약해져서 데이터가 사라짐(일정시간마다 데이터를 새로고침 해야함)
비용이 낮아서 일반적으로 주 메모리로 사용됨
SRAM(static ram)
: 전력이 공급되는 동안에는 데이터가 지속적으로 유지됨(dram보다 속도가 빠름)
용량이 크지 않지만 빠른 엑세스 시간이 필요한 곳에 사용됨 ex)캐시메모리, 버퍼메모리 등
SDRAM(synchrinous dram)
:dram의 성능을 개선한 버전. 클럭틱이 발생할 때마다 데이터를 저장
<비휘발성 메모리>
플래시 메모리(flash memory)
: 전력 없이도 데이터를 보관
SSD(solid state drive)
: 빠른 데이터 접근 속도.저전력.높은 내구성. HDD에 비해 가격이 비쌈
ROM(read only memory): 제조과정에서 데이터나 프로그램이 저장되고 나서 이후엔 수정 불가
PROM(programmable rom)
:사용자가 전용 기계를 이용하여 데이터를 한번 변경/저장할 수 있음
EPROM(erasable&progrannable rom)
:데이터를 여러번 쓰고 지울 수 있음. 전용 장치가 있어야함 -> 쉽게 연결X
부팅 : 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정
부트 스트랩(bootstrap)
:운영체제를 디스크로부터 메모리로 옮기는 과정
컴퓨터에 전원이 처음 켜졌을 때에는 수행 가능한 프로그램이 메모리에 로딩 되어있지 않은 상태 바이오스에서 시작됨
마스터 부트 레코드(master boot record MBR)
:디스크의 맨 앞에 기록되어 있는 시스템 기동용 영역
시스템 구동에 필수적인 정보와 구동에 필요한 코드 포함
<컴퓨터 성능 향상 기술>
버퍼(buffer) → 소프트웨어적 개념
- 두 장치 간에 속도의 차이를 완화하는 역할을 하는 장치
- 일정량의 데이터를 모아 미리 옮겨 둠으로 써 속도의 차이를 완화
- 이중버퍼(double buffer)
:한 버퍼에서 데이터를 저장하는 동안 다른 버퍼는 데이터를 읽어드림
(한 버퍼에서 데이터를 읽는 동안 프로세스사 기다리지 않고 데이터를 저장하므로 효율 상승)
- 삼중버퍼(triple buffer)
: GPU와 CPU의 병행 작업 시 주로 사용하는 기능
스풀(spool)
: cpu와 입출력장치(속도느림)가 독립적으로 동작하도록 고안된 소프트웨어 버퍼
스플러
:인쇄할 내용을 순차적으로 출력하는 소프트웨어 출력 명령을 내린 프로그램과 독립적으로 동작
(출력 명령을 내린 후 해당 프로그램을 종료해도 끝까지 제대로 출력됨)
캐시(cashe) → 하드웨어적 개념( 저장장치)
- 메모리 데이터를 미리 가져와 저장해두는 임시장소
- 주로 메모리와 cpu간의 속도차이(bsb와 fsb속도차이)를 완화하기 위해 사용
- 필요 데이터를 모아 한꺼번에 전달하는 버퍼의 일종(cpu가 사용할 것으로 예상되는 데이터를 미리 가져옴)
- cpu는 메모리 사용 시 캐시를 먼저 방문(원하는 데이터가 있는지 탐색 . 없으면 메모리에서 해당 데이터를 찾아와서 로딩)
캐시히트(cache hit)
: 캐시에서 원하는 데이터를 찾은 경우 해당데이터를 바로 사용
캐시미스(cache miss)
: 캐시에 원하는 데이터가 없음 메모리로 가서 찾아와 로딩
캐시 적중률(cache hit ratio)
: 캐시히트 되는 비율 일반적인 컴퓨터의 캐시 적중률을 90%
<캐시 반영정책>
즉시쓰기(write through)
:캐시에 있는 데이터가 변경되면 즉시 메모리에 반영되는 방식. 메모리와의 빈번한 데이터 전송으로 인해 성능이 느려짐
메모리의 최신값이 항상 유지됨
지연쓰기(write back)
:캐시에 있는 데이터가 변경되면 이를 즉시 메모리에 반영하는 것이 아니라 변경된 내용을 모아뒀다가 주기적으로 반영하는 방식. 카피백(copy back)이라고도 함. 메모리와의 데이터 전송 횟수가 줄어 시스템 성능이 향상됨.
메모리와 캐시 데이터 사이의 불일치가 발생할 수도 있음
하드웨어 안전제거
버퍼가 다 찰 때까지 입출력장치에 데이터가 전송되지 않음
지연쓰기: ‘지연쓰기’수행전에 저장장치를 제거하면 버퍼안의 데이터가 저장되지 않음
flush : 버퍼가 다 차지 않아도 버퍼의 내용을 저장장치로 즉시 전송
<일반캐시와 특수캐시>
일반캐시
: 명령어와 데이터의 구분없이 모든 자료를 가져옴. 메모리와 연결되기 때문에 level2(l2)캐시라고 부름
특수캐시
:명령어와 데이터를 구분하여 가져옴. cpu레지스터에 직접 연결되어 level1(L1)캐시라고 부름
<저장장치의 계층구조>
속도가 빠르고 비싼 저장장치일수록 cpu에 가까운 쪽에 배치
ex)레지스터 캐시
메모리에서 작업한 내용은 저렴하고 용량이 큰 저장장치에 영구적으로 저장 ex)하드디스크
→ 적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻음
<입출력 방식>
폴링(polling)
:cpu가 입출력장치에서 직접 데이터를 가져오거나 내보냄
cpu가 입출력장치의 상태를 주기적으로 검사(일정한 조건을 만족하면 데이터처리)
cpu가 모든 입출력에 관여 → 시스템 효율 저하
인터럽트(interrupt) → 현대에서 많이 씀
: 입출력 관리자가 cpu 대신 입출력을 진행
데이터의 입출력 동안 cpu가 다른작업을 진행 → 시스템 효율 개선
인터럽트 : 입출력 관리자가 cpu에 보내는 입출력 완료신호
인터럽트 번호
: 어떤 주변장치의 작업이 끝났는 지를 cpu에 알려주기 위해 사용하는 번호. 윈도우 운영체제에서는 IRQ(interrupt request)라 부름
인터럽트 벡터
:여러개의 인터럽트를 하나의 배열로 만든 것. 배열 하나를 통해 여러개의 입출력 작업을 한꺼번에 처리 가능
인터럽트 벡터의 값이 1이면 해당 입출력 인터럽트가 발생 했다는 의미
<인터럽트의 종류>
외부 인터럽트 : 입출력 장치의 인터럽트
기계적인 오류 때문에 발생하는 인터럽트(ex 전원이상)
내부 인터럽트 : 프로세스의 잘못이나 예상치 못한 문제 때문에 발생하는 인터럽트
시그널 : 사용자가 직접 발생시키는 인터럽트
인터럽트 핸들러 :인터럽트를 처리하는 함수
운영체제는 인터럽트가 발생하면 인터럽트 핸들러를 호출하여 작업
시그널의 경우 개발자가 만든 인터럽트 핸들러를 등록 가능
직접 메모리 접근(direct memory access DMA)
: 입출력 관리자가 cpu의 개입 없이 메모리에 접근 가능
데이터 전송의 효율을 높이고 cpu의 부담은 감소
DMA 제어기
1) cpu로부터 전송명령을 받고
2) 메모리와 입출력 장치 간의 데이터 전송을 직접 처리
3) 데이터 전송이 완료되면 인터럽트를 발생시켜 cpu에 전송 완료를 알림
주의할점
: cpu와 DMA가 동시에 메모리에 접근 할 때 자원 충돌할 가능성 존재
메모리 맵 입출력(memory mapped I/O MMIO)
: 메모리의 일정 공간을 입출력에 할당하는 기법
입출력 작업 영역
: DMA 제어기가 전송하는 데이터를 보관하는 별도의 메모리
cpu와 dma의 작업공간이 겹치는 것을 방지
장점
: 프로그래밍의 단순화(특수한 입출력 명령어 없이도 메모리 접근을 통해 장치 제어) . 빠른 입출력 응답시간
멀티프로세서 시스템
- 성능향상을 위해 프로세서를 여러 개 설치하여 사용하는 시스템
- 프로세서마다 레지스터와 캐시를 가짐
- 모든 프로세서가 시스템 버스를 통해 메인 메모리를 공유
- 장점: 많은 작업을 동시에 실행시킬수 있음
병렬처리 시스템
현대의 CPU
: 멀티코어 및 명령어 병렬처리 기능 탑재
멀티코어 시스템
:하나의 칩에 cpu의 핵심이 되는 코어를 여러개 만들어 여러 작업을 동시에 처리 (듀얼코어, 쿼드코어, 옥타코어)
명령어 병렬처리(parallel processing) : 하나의 코어에서 여러개의 명령어를 동시에 처리하는 것
멀티스레드(multithread) : 하나의 코어에서 여러개의 스레드를 동시에 처리하는 방법
스레드 : cpu가 처리할 수 있는 작업의 단위
<프로세스와 스레드>
동시성(concurrency) 시분할 처리
: 하나의 프로세서가 여러개의 작업(스레드)를 번갈아 가며 처리 1:N 참고) 문맥교환
병렬성(parallelism) 실제로 동시
: 여러개의 프로세서가 각각의 작업을 맡에서 동시에 처리 N:N
<cpu 발전에 관한 법칙>
무어의 법칙
- cpu 속도는 24개월마다 대략 2배정도 빨라진다
- 최근엔 cpu처리 속도를 올리는 대신 멀티코어를 장착
- 하나의 코어에서 여러개의 명령어를 동시에 실행하는 멀티스레드도 많이 사용
암달의 법칙
- 주변장치 성능 향상 없이 cpu속도만 2배로 늘려봐야 성능이 2배 빨라지지 않는다
- 메모리를 비롯한 주변장치의 성능도 굉장히 중요함
'운영체제' 카테고리의 다른 글
파일시스템 (0) | 2025.02.02 |
---|---|
입출력 시스템과 저장장치 (0) | 2025.01.18 |
프로세스 동기화 (0) | 2024.12.22 |
운영체제의 역할 (3) | 2024.10.27 |