본문 바로가기
What I Learned

[WIL] Day 17

by 케찹이 2023. 6. 19.
반응형

~~~RAM의 특성과 종류~~~

RAM이크면 뭐가 좋은가, 작으면 뭐가 불리한가? RAM의 종류들은?

 

RAM의 특징. 

RAM은 실행할 대상을 저장, 그치만 전원이 꺼지면 기억을 못한다. 

RAM은 휘발성저장장치, 보조기억장치는 비휘발성 저장 장치이다. 

 

RAM의 종류 크게 4가지

  • DRAM
  • SRAM
  • SDRAM
  • DDR SDRAM

 

DRAM(Dynamic RAM)

  • 동적의
  • 저장된 데이터가 동적으로 사라지는 RAM
  • 데이터 소멸을 막기 위해 주기적으로 refresh해주어야한다.
  • 일반적으로 메모리로 사용되는 RAM

 

SRAM(Static RAM)

  • 정적인
  • 저장된 데이터가 사라지지 않는 RAM
  • DRAM보다 일반적으로 빠름. 
  • 일반적으로 캐시 메모리에서 사용되는 RAM, “대용량 필요없고 빨리 처리해야할때 유용”

 

SDRAM(Synchronous DRAM)

  • 특별한(발전한 형태의) DRAM
  • 클럭 신호와 동기화된 DRAM

 

DDR SDRAM(Double Data Rate SDRAM)

  • 특별한 형태의 SDRAM
  • 최근 가장 대중적으로 사용하는 RAM
  • 대역폭을 넓혀 속도를 빠르게 만든 SDRAM
  • 대역폭은 데이터를 주고받는 길의 너비
  • DDR SDRAM은 대역폭이 두 배 넓은 SDRAM이다. 
  • DDR2 SDRAM, DDR보다 두배 넓은 
  • DDR3, DDR4도 있다…

 

~~~메모리의 주소 공간~~~

논리주소, 물리주소. 논리주소와 물리 주소로 주소 공간을 나누는 이유, 논리 주소를 물리 주소로 변환하는 방법. 

CPU와 실행 중인 프로그램은 메모리 몇번지에 무엇이 저장되어 있는지 다 알지 못함.

왜냐하면 메모리에 저장된 값은 시시때떄로 변하기 때문에. 

  • 새롭게 실행되는 프로그램은 새롭게 메모리에 적재
  • 실행이 끝난 프로그램은 메모리에서 삭제 
  • 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 다름.

 

물리주소

  • 메모리 입장에서 바라본 주소
  • 말 그대로 정보가 실제로 저장된 하드웨어 주소

 

논리 주소

  • CPU와 실행 중인 프로그램 입장에서 바라본 주소 
  • 실행중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소

 

MMU(메모리 관리 장치)라는 하드웨어에 의해서 논리주소가 물리주소로 바뀐다.

MMU는 논리 주소와 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.

베이스 레지스터는 물리주소상의 프로그램의 시작 주소가 담긴다. 논리 주소는 실제로 있는 저장되어 있는 프로그램으로부터 얼마나 떨어져있느냐. 

 

베이스 레지스터: 프로그램의 가장 작은 물리 주소를 저장하는 셈

논리 주소: 프로그램의 시작점으로부터 떨어진 거리인 셈

 

메모리 보호를 위해서 필요한 것이 한계 레지스트/리미트 레지스터가 필요

  • 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막음
  • 베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면 한계 레지스터는 논리 주소의 최대 크기를 저장
  • 베이스 레지스터 값 <= 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터

 

~~~케시 메모리~~~

저장장치 계층 구조 (memory hierarchy)

  1. cpu와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
  2. 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.

 

캐시 메모리:

  • cpu와 메모리 사이에 위치한 레지스터보다 용량이 크고 메모리보다 빠른 SRAM기반의 저장장치
  • CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생
  • “CPU가 매번 메모리에 왔다 갔다 하는 건 시간이 오래 걸리니, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 쓰자”

 

계층적 캐시 메모리 (L1, L2, L3캐시)

일반적으로 L1, L2캐시는 코어 내부, L3는 코어 외부에 위치해 있다. 

멀티코어에서는 캐시의 싱크를 맞추는 것이 중요.

L1을 조금이라도 더 빨리 실행하기 위해서 명령어만을 담고 있는 L1 cache, 데이터만을 담고 있는 L1 cache으로 분리하기도 한다. 

 

참조 지역성의 원리 (locality of reference)

캐시 메모리는 많은 메모리의 정보속에서 무엇을 가져와야 하나? -> CPU가 자주 사용할 법한 내용을 예측하여 저장.

예측이 들어맞을 경우(CPU가 캐시 메모리에 저장된 값을 활용할 경우) => 캐시 히트라고 함. 

예측이 틀렸을 경우 => 캐시 미스

캐시 적중률 = 캐시 히트 횟수 / (히트 + 미스) 80~90% 최근 캐시.

 

CPU가 사용할 법한 데이터를 잘 예측하는 방법이 참조 지역성의 원리

CPU가 메모리에 접근할때의 주된 경향성을 방탕으로 만들어진 원리

  1. CPU는 최근에 접근했던 메모리 공간에 다시 접근할려는 경향이 있다.
  2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. (공간 지역성, 한 프로그램의 관련 기능들은 메모리에 한 곳에 모여있음)

 

~~~다양한 보조 기억 장치~~~

대표적인 보조기억장치인 하드디스트와 플래시 메모리를 알아보자. 플래시 메모리는 ssd, usb

 

하드 디스크는 자기적인 방식으로 데이터를 보존 

플래터, 여러겹으로 이루어짐, 양면 모두 사용. 스핀들이 이거를 쭉 돌려줌. 

회전의 단위가 RPM(Revolution Per Minute) : 분당 회전수 

 

플래터를 읽고 쓰는 수단, 헤드. 모든 면마다 헤드 필요, 그래서 면마다 헤드가 달려 있음.헤드 움직여주는게 디스크암.

 

하드 디스크 저장 단위

하드디스크는 크게 트랙과 섹터 단위로 저장이 된다. 

트랙은 플래터를 이루고 있는 동심원을 그리고 있는 저장 단위가 트랙

색터는 트랙을 피자조각처럼 나눴을 때 그 중의 한 조각을 색터라고 한다. 하나 이상의 색터 합쳐서 블록이라고도 한다. 

 

여러겹의 플래터 상에서 같은 트랙이 위치 한 곳을 모아 연결한 논리적 단위를 실린더(cylinder)라고 한다. 보통 연속된 정보는 한 실린더에 저장. 왜? 헤드를 움직이지 않아도 되서. 

 

하드 디스크가 저장된 데이터에 접근하는 시간

  • 탐색 시간(seek time)
  • 회전 지연(rotational latency)
  • 전송 시간(transfer time)

 

탐색 시간:

  • 접근하려는 데이터가 저장된 트랙까지 헤드를 이동하는 시간 

 

회전 지연:

  • 헤드가 있는 곳으로 플래터를 회전시키는 시간

 

전송 시간: 

  • 하드디스크와 컴퓨터간에 데이터를 실제 전송하는 시간

 

플래시 메모리:

  • 전기적으로 데이터를 읽고 쓰는 반도체 기반 저장 장치, 보조기억장치외에도 쓰인다.

플래시 메모리의 종류:

  • NAND 플래시 메모리(오늘날 더 많이 쓰임, 뒤에 설명하는 것도 얘)
  • NOR 플래시 메모리

 

셀(cell)

  • 플래시 메모리에서 데이터를 저장하는 가장 작은 단위
  • 이 셀이 모이고 모여 수 MB, GB, TB 저장 장치가 된다.

한셀에 

  • 1비트를 저장할 수 있는 플래시 메모리: SLC
  • 2비트를 저장할 수 있는 플래시 메모리: MLC
  • 3비트를 저장할 수 있는 플래시 메모리: TLC
  • 4비트를 저장할 수 있는 플래시 메모리: QLC

 

SLC:

  • 한셀로 두개의 정보 표현
  • 비트의 빠른 입출력
  • 긴 수명
  • 용량 대비 고가격

 

플레시메모리는 수명이 있다, like 연필

 

MLC:

  • 한 셀에 네개의 정보 표현
  • SLC보다 느린 입출력
  • SLC보다 짧은 수명
  • SLC보다 저렴
  • 시중에서 많이 사용

 

TLC:

  • 한 셀에 여덟개의 정보 표현
  • MLC보다 느린 입출력
  • MLC보다 짧은 수명
  • MLC보다 저렴
  • 시중에서 많이 사용.

 

  • 셀들이 모여 페이지
  • 페이지가 모여 블록
  • 블록이 모여 플레인
  • 플레인이 모여 다이

읽기/쓰기 단위와 삭제 단위가 다르다

  • 읽기/쓰기는 페이지 단위로 이루어지고
  • 삭제는 블록단위로 이루어진다. 

 

페이지의 상태:

Free상태:

 - 어떠한 데이터도 저장하지 않고 있어서 새로운 데이터를 저장할 수 있는 상태

Valid 상태:

  • 이미 유효한 데이터를 저장하고 있는 상태

Invalid 상태:

  • 유효하지 않은 데이터(쓰레기값)을 저장하고 있는 상태

플래시 메모리는 덮어 쓰기가 불가. 

 

가비지 컬랙션:

  1. 유효한 페이지들만을 새로운 블록에 복사 
  2. 기존의 블록을 삭제 

 

~~~RAID의 정의와 종류~~~

1테라 4개의 하드디스크를 RAID로 구성하면 4테라 하드디스크 하나의 성능을 능가할 수가 있다.

 

RAID(Redundant Array of Independent Disks)

  • 하드 디스크와 SSD로 사용하는 기술
  • 데이터의 안정성 혹은 높은 성능을 위해 여러 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술

 

RAID 레벨

  • RAID를 구성하는 기술

 

RAID 0

데이터를 단순히 나누어 저장하는 구성 방식.

각 하드디스크는 번갈아 가며 데이터를 저장, 차곡차곡 번갈아가면서 저장하는 방식

스트라입(stripe): 마치 줄무늬처럼 분산되어 저장하는 데이터

스트라이핑: 분산하여 저장하는 것.

장점: 입출력 속도 향상.

단점: 저장된 정보가 안전하지 않다. 하드 디스크 하나가 고장이 나면 다른 하드 디스크의 정보도 사용할 수가 없음.

 

RAID 1(미러링): 복사본을 만드는 방식

데이터를 쓸때 원본과 복사본 두 군데에 씀(느린 쓰기 속도)

단점: 하드 디스크 개수가 한정되었을 때 사용 가능한 용량이 적어짐 

장점: 백업과 복구가 용이하다, 안점함

 

RAID 4: RAID 1처럼 완전한 복사본을 만드는 대신 오류를 검출하고 복구하기 위한 정보를 저장, 패리티비트를 저장

패리티 비트는 오류 검출뿐만 아니라 복구도 가능하다. 

단점: 패리티 디스크의 병목, 다른 하드 디스크에 새로운 정보를 쓸때마다 모두 검사해야하기 때문에 병목현상발생.

 

RAID 5: 패리티 정보를 분산하는 방식

RAID 6: 두 종류의 패리티 사용, 5보다 안전하지만 느리다.

 

~~~장치 컨트롤러와 장치 드라이버~~~

장치 컨트롤러(I/O controller, I/O module)

입출력 장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고받는다. 

 

장치 컨트롤러의 역할

  • cpu와 입출력장치 간의 통신중개
  • 오류 검출
  • 데이터 버퍼링

 

장치 컨트롤러의 구조

데이터 레지스터 

  • CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터(버퍼)
  • RAM을 사용하기도 

상태 레지스터

  • 상태 정보 저장
  • 입출력 장치가 입출력 작업을 할 준비가 되었는지
  • 입출력 작업이 완료되었는지
  • 입출력장치에 오류는 없는지 등의 상태 정보

제어 레지스터

  • 입출력장치가 수행할 내용에 대한 제어정보

 

장치 드라이버: 장치 컨트롤러의 동작을 감지하고 제어하는 프로그램, 연결하기 위한 소프트웨어 통로

실은 장치 드라이버를 인식하는 것은 운영체제이다. 

 

~~~다양한 입출력 방법~~~

3가지 입출력 방법: 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력

 

프로그램 입출력: 프로그램속 명령어로 제어, 입출력 명령어로 장치 컨트롤러와 상호 작용

메모리에 저장된 정보를 하드 디스크에 백업하는 예시)(=하드 디스크에 새로 쓰기)

  1. CPU는 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령 내보내기
  2. 하드 디스크 컨트롤러는 하드 디스크 상태 확인 -> 상태 레지스터에 준비 완료 표시
  3. -1 CPU는 상태 레지스터를 주기적으로 읽어보며 하드 디스크의 준비 여부를 확인 

  3-2 하드 디스크가 준비되었다면 백업할 메모리의 정보를 데이터 레지스터에 쓰기

근데 cpu가 레지스터들을 어떻게 알수 있을까??? 

2가지 방식, 메모리 맵 입출력 & 고립형 입출력

 

메모리 맵 입출력:

메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법.

메모리에 주소 공간이 축소됨

메모리와 입출력장치에 같은 명령어 사용 가능

 

고립형 입출력:

메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법.(입출력 읽기/쓰기 선을 활성화시키는)  입출력 전용 명령어를 사용. 

메모리 주소 공간이 축소되지 않음

입출력 전용 명령어 사용

 

인터럽트 기반 입출력:

하드웨어 인터럽트는 장치 컨트롤러에 의해 발생.

동시다발적인 인터럽트: 입출력장치가 많을 때를 가정. 마우스, 키보드, 모니터 등등 동시다발적 인터럽트.

cpu는 이런 많은 요청을 어떻게 처리하나?

이러한 방식은 현실직이지 않다. 하드웨어 인터럽트중에서도 더 빨리 처리해야 하는 인터럽트가 있다. 우선순위가 높은 인터럽트가 있다.

 

PIC(Programmable Interrupt Controller)

  1. 여러 장치 컨트롤러에 연결되어
  2. 장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단한 뒤
  3. CPU에게 지금 처리해야 하는 인터럽트가 무엇인지 판단하는 하드웨어.

PIC는 여러개를 사용하는 경우가 많다. 

 

DMA 입출력

프로그램 입출력, 인터럽트 기반 입출력의 공통점?

입출력장치와 메모리간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거친다. 

가뜩이나 바쁜 CPU.. 하드 디스크 백업과 같이 대용량 데이터를 이동한다면?

이러한 문제 해결 위해 DMA(Direct Memory Access), cpu를 거치지 않고 메모리에 직접적으로 접근하는 기능. 너무나도 중요하게 다뤄지는 기능.

DMA를 하기 위해선 DMA컨트롤러 필요. 

 

DMA 입출력 과정

  1. CPU는 DMA컨트롤러에 입출력 작업을 명령
  2. DMA는 CPU대신에 장치 컨트롤러와 상호작용하며 입출력 작업을 수행(이때 필요할 경우 메모리에 직접 접근 가능)
  3. 입출력 작업이 끝나면 DMA컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림

문제, 시스템 버스는 공용자원이기 때문에 동시 사용이 불가능. 

그래서 CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 사용, 또는 일시적으로 허락을 구하고 시스템 버스 이용. (Cycle Stealing)

 

입출력 버스

장치 컨트롤러가 전부 시스템 버스에 연결해도 되나?

괜찮지 않습니다. 그래서 입출력버스에 연결, 

 

~~~운영체제를 알아야 하는 이유~~~

모든 프로그램은 실행을 위해 자원을 필요로 한다. 

 

자원/시스템 자원

  • 프로그램 실행에 있어 마땅히 필요한 요소
  • 컴퓨터의 네가지 핵심 부품 포함!
  • 하드웨어만을 자원이라고 하지는 않는다. 다른 여러가지 요소있음

 

운영체제는 

  • 실행할 프로그램에 필요한 자원을 할당하고
  • 프로그램이 올바르게 실행되도록 돕는
  • 특별한 프로그램

운영체제는 메모리에 따로 적재되는 곳이 있고 그 곳을 커널 영역이라고 부른다. 일반적인 프로그램들은 사용자 영역에 적재된다.

누가 프로그램이 특정 주소로 지정을 하나, 운영체제가 알맞은 자리에 적재해서 실행하는 것. 종료하면서 비어주는 것도 OS.

여러개 프로그램 동시 실행, 더 정확하자면 빠르게 번갈아가면서 실행. cpu가 빠르게 동시에 실행, 어떤 프로그램을 먼저 실행, 오랫동안 실행 이러한 것들을 결정해주는 것이 운영체제의 역할. 입출력장치도 관리

 하드웨어와 응용프로그램 연결하는 프로그램.

 

~~~운영체제의 큰 그림~~~

  • 커널이란?
  • 운영체제의 서비스 종류?
  • 시스템 콜과 이중 모드란?

운영체제의 심장, 커널.

방대한 분량안에 핵심적인 서비스 존재.

이러한 핵심 서비스를 담당하는 부분을 커널이라고 한다.

대부분의 전공서는 커널을 설명.

 

커널에 속하지 않는 기능: 유저 인터페이스. 사용자와 컴퓨터간 통로, 운영체제의 핵심 기능은 아님.

 

이중모드와 시스템 호출

사용자가 실행하는 프로그램은 자원에 직접 접근한가?

ㄴㄴ, 직접 접근은 위험하다. 

응용 프로그램들이 자원에 접근하려 할때 오직 자신을 통해서만 접근하도록 하여 자원을 보호

이러한 문지기 역할은 이중 모드로 구현

 

이중 모드

  • CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식
  • 사용자 모드 
  • 커널 모드

플래그 레지스터안의 슈퍼바이저 플래그가 커널인지 사용자인지 나타냄. 

 

시스템 호출

  • 커널 모드로 전환하여 실행하기 위해 호출
  • 일종의 소프트웨어 인터럽트!

시스템 호출은 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법이다.

 

운영체제의 핵심 서비스

  • 프로세스 관리
  • 자원 접근 및 할당
  • 파일 시스템 관리

 

프로세스 관리

  • 프로세스 == 실행중인 프로그램
  • 수많은 프로세스들이 동시에 실행
  • 동시다발적으로 생성/실행/삭제되는 다양한 프로세스를 일목요연하게 관리
  • 프로세스와 스레드, 프로세스 동기화, 교착상태 해결

 

자원 접근 및 할당

  • CPU(CPU스케줄링: 어떤 프로세스를 먼저, 얼마나 오래 실행할까?)
  • 메모리(페이징, 스와핑, …)
  • 입출력장치

 

파일 시스템 관리

  • 관련된 정보를 파일이라는 단위로 저장 장치에 보관 
  • 파일들을 묶어 폴더(디렉터리)단위로 저장 장치에 보관

 

반응형

'What I Learned' 카테고리의 다른 글

[TIL] IT 5분 잡학사전 1일차 에피소드1 ~ 에피소드5  (0) 2024.03.16
[WIL] Day 18  (0) 2023.06.19
[WIL] Day 16  (0) 2023.06.18
[WIL] Day 15  (0) 2023.06.17
[WIL] Day 14  (0) 2023.06.10

댓글