일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- classloader
- Operating System
- MethodArea
- 자바컴파일러
- JVM
- abstract
- 라피신
- HeapArea
- 참조변수
- 42서울
- 상속관계
- 바이트코드
- SRP
- JIT
- 이노베이션아카데미
- 운영체제
- 포함관계
- jdk
- java
- 제네릭스
- Compiler
- LSP
- pg_hba.conf
- generics
- 도커네트워크
- 42seoul
- la-piscine
- javac
- StackArea
- RDD
- Today
- Total
while(1) 작심삼일();
2. 컴퓨터의 구조 본문
폰 노이만 구조 : CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 현대 컴퓨터의 구조. 모든 프로그램은 메모리에 올라와야 실행할 수 있음.
클럭 : 틱을 만들어 CPU안의 구성 부품이 작업하는 속도단위
헤르츠 : 클럭틱이 발생하는 속도를 나타내는 단위(데이터 전송속도를 나타냄) 1초에 클록틱이 몇번 발생했는지를 나타내고, 1Ghz면 1초에 10억번 연산을 한다. CPU, 메인보드 등 속도에 사용 됨
메모리
- 램(Random Access Memory) : 읽기/쓰기가 가능
- 휘발성 : 전력이 끊기면 사라짐
- DRAM(동적 램) : 시간이 지나면 데이터가 사라짐. 재생 필요 → 일반 메인메모리
- SRAM(정적 램) : 전력이 공급되면 데이터가 유지됨 → 캐시 같은 고속 메모리
- SDR(single data rate) SDRAM : DRAM 발전된 형태. 클럭틱이 발생할 때마다 1개의 워드크기의 데이터를 저장함.
- DDR(double data rate) SDRAM : SDRAM 2배 발전된 형태. 클럭틱이 발생할 때마다 2개의 워드크기의 데이터를 저장함.
- DDR - N SDRAM : SDR에 비해 2^N배 대역폭이 더 큰 SDRAM (ex. DDR3, DDR4, DDR5)
- 비휘발성 : 전력이 끊겨도 보관됨 (플래시 메모리, FRAM, PRAM)
- 플래시 메모리 : 디카, MP3, SD카드, USB 드라이버 같은 전력 없이 사용 됨. 소자의 사용 횟수 정해져 있음
- 휘발성 : 전력이 끊기면 사라짐
- 롬(Read Only Memory) : 읽기만 가능하고 전력이 끊겨도 보관됨 (마스크롬, PROM, EPROM)
CPU : 명령어를 해석하여 실행하는 장치
- 산술논리 연산장치(ALU. Arithmetic and Logic Unit) : +-*/ 산술 연산 + AND OR 논리 연산과 같은 데이터를 연산함
- 제어 장치 : 작업을 지시함
- 레지스터 : CPU 내에 데이터를 임시로 보관함
int a = 1, b = 2;
int sum = a + b;
a와 b가 가르키고 있는 메모리에 접근을 하여 값을 레지스터에 임시 보관을 하고, 산술논리 연산장치가 연산을 하여 다시 레지스터에 저장을 했다가 메모리에 전달한다. 이러한 과정(메모리 접근, 연산 실행, 결과값 메모리에 전달) 등을 제어 장치가 지시한다.
레지스터의 종류 : CPU가 사용하는 레지스터는 엄청 많다.
- 데이터 레지스터 : CPU의 대부분 레지스터로, 메모리에서 가져온 데이터를 임시 보관
- 주소 레지스터 : 데이터나 명령어가 저장된 메모리의 주소 보관
- 프로그램 카운터(PC) : 다음에 진행할 명령어를 가르키고 있음
- 명령어 레지스터 : 현재 실행중인 명령어 보관
- 메모리 주소 레지스터 : 메모리에서 값을 가져오거나, 연산된 값을 내보낼 때 메모리 주소를 이 곳에 담아두면 메모리관리자(MMU)가 해당 주소를 확인
- 메모리 버퍼 레지스터 : 메모리 주소 레지스터에 있는 주소로 보낼 데이터를 임시로 보관(MAR와 항상 같이 동작함)
- 상태 레지스터 : 연산 결과를 저장
- 경계 레지스터 : 메모리를 보호하기 위해 현재 작업하는 메모리 시작주소를 저장
- 한계 레지스터 : 경계 레지스터와 같이 현재 작업의 메모리 마지막주소를 저장 (두 범위를 벗어나면 인터럽트를 발생시켜 운영체제를 깨우고 운영체제가 강제 종료시킴)
시스템 버스 : 메모리와 주변장치도 연결하는 버스. 가장 느린 속도로 맞춰짐
- 제어 버스 : CPU의 제어장치와 메모리가 양방향으로 연결되어 있는 버스로, 데이터를 읽기/쓰기에 대한 신호를 전달함
- 주소 버스 : CPU의 메모리 주소 레지스터와 메모리가 단방향으로 연결되어 있는 버스로, 데이터를 읽기/쓰기 할 때의 위치주소를 전달함
- 데이터 버스 : 주소 버스가 주소를 전달하면 데이터를 전달하는 양방향으로 연결되어 있는 버스.
CPU 내부 버스 : CPU 클록과 같아서 시스템 버스보다 훨씬 빠름
두 가지 버스의 속도차로 인해 CPU와 메모리 간 작업이 지연된다.
해결 방안
- 더 넓은 대역폭을 가지고 있는 램 사용
- 버퍼 : 일정량의 데이터를 모아서 옮김으로써 속도의 차이를 완화하는 장치
- 캐시 : 버퍼의 일종으로, 많이 사용할 것으로 예상되는(지역성 이론) 데이터를 미리 가져다 두는 장소(CPU의 캐시메모리). 캐시 먼저 탐색 → 있으면 히트, 없으면 미스로 표현함. L1 캐시 - 명령어, 데이터 캐시 (CPU 레지스터랑 연결) L2 캐시 - 일반 캐시 (메모리랑 연결)
- 즉시 쓰기 : 캐시에 있는 데이터가 변경되면 바로 메모리에 반영한다. 성능 저하가 되지만 데이터 유실가능성이 줄어듦
- 지연 쓰기(Copy Back) : 모아서 반영한다. 성능 향상되나 메모리와 캐시의 데이터 불일치 가능성이 있음
버스의 대역폭 : 한 번에 전달될 수 있는 데이터의 최대 크기로, CPU가 처리할 수 있는 데이터의 크기와 같음(32/64Bit CPU경우 레지스터의 크기도 같음)
메모리 주소는 소자 하나(1bit)단위로는 표현할 수 없어 바이트 단위로 지정되지만, 읽기/쓰기를 할 땐 워드(32/64bit CPU와 크기와 동일) 단위로 움직인다.
인터럽트 : CPU에게 보내는 입출력 완료 또는 하드웨어 이상 현상 신호 (↔폴링, 직접 CPU가 입출력장치에서 데이터를 가져오고 내보냄)
- CPU가 입출력 관리자에게 입출력 명령을 보냄
- 입출력 관리자는 메모리를 가져다 놓거나 가져다 두고 CPU에게 인터럽트를 보냄
- CPU는 하던 일을 중단하고 받은 인터럽트를 처리함
내부(동기적, 사용자) 인터럽트(0 ~ 31번) : 프로세스의 오류로 발생(ex. 0으로 나눈 경우, 오버플로, 주소범위 벗어나는 경우 등)
외부(비동기적) 인터럽트(32 ~ 47번) : 입출력 및 하드웨어 상태변화로 발생
인터럽트 벡터 : 각 인터럽트 번호와 인터럽트를 처리하는 핸들러가 쌍으로 연결된 자료구조. 동시에 발생하는 인터럽트를 하나로 묶어서 처리하는 개념.
IRQ(Interrupt ReQuest) : 주변장치(하드웨어) 중 어떤 것의 작업이 끝났는지 알려주기 위한 번호. 운영체제마다 다름. 외부 인터럽트와 일대일로 매칭된다(IRQ 0 == 외부 32번, ... )
DMA(Direct Memory Access) : 폴링 방식과 다르게 인터럽트 방식을 사용하면서 CPU가 가진 메모리 접근권한(입출력 관리자가 받음)
MMIO(Memory Mapped I/O) : CPU가 사용하는 메모리와 DMA를 가진 입출력관리자가 사용하는 공간이 혼용될 가능성이 있어 입출력 관리자가 사용하는 메모리공간을 할당하는 기법
Cycle Steal : CPU와 DMA를 가진 입출력관리자가 같이 메모리에 접근하는 상황이 발생하면, CPU 작업속도가 더 빠르기 때문에 양보하는 것 또는 CPU 집중 프로세스보다 입출력 집중 프로세스의 우선순위를 높여 먼저 실행상태로 들어가게 하는 것. 실행상태로 들어가면 바로 입출력 요구에 의해 대기 상태로 가기 때문에 다른 프로세스가 CPU를 사용할 수 있음.
'CS > operation system' 카테고리의 다른 글
6. 데드락 (0) | 2021.10.06 |
---|---|
5. 프로세스 동기화 (0) | 2021.10.05 |
4. CPU 스케줄링 (0) | 2021.10.05 |
3. 프로세스와 스레드 (0) | 2021.10.05 |
1. 운영체제의 개요 (0) | 2021.10.04 |