Flash memory란? 

 - 전기적으로 데이터를 지우고 다시 기록할 수 있는 비휘발성 메모리
 - 기계 내부 eMMC와 같은 NAND플래쉬 저장소 + UFS에 사용
 

ROM과의 비교

ROM(Read Only Memory)의 경우 PROM과 EPROM으로 나눌 수 있다.

 - PROM(Programmable ROM) : 데이터 변경 X
 - EPROM(Erasable PROM) : 데이터 변경 O 

그 중 EPROM 은 삭제하는 방식에 따라 UV-EPROM과 EEPROM으로 나눌 수 있다.

 - UV-EPROM : 자외선으로 삭제하는 방식 (삭제하는 방식이 번거로워 최근 사용되지 않음)
 - EEPROM :  전기적으로 삭제하는 방식 -> 오늘날 플래쉬 메모리로 발전

참고로 Memory addressing이 아닌 sector addressing을 사용하기때문에 주 기억장치로 분류되는 ROM과는 다르게 하드디스크와 유사한 보조기억장치로 분류된다. (ROM의 일종으로 분류하기도 함)

장단점

<장점>

1. 비 휘발성
2. 작고 가벼움. 자기매체나 광학매체에 비해 기계적인 충격에 강함.
3. read, write가 매우 느림. But, 여러개를 사용하면 나눠서 읽고 쓸 수 있기 때문에 하드디스크보다 빠름.

<단점>
1. 블록을 지우기 전, 새로 쓸 수 없음
2. 읽기/쓰기 횟수에 제한. 수명이 존재함.
3. 블록 단위로만 재 기록 가능

 

타입분류

NAND타입과 NOR타입으로 분류된다.

  NAND NOR
용도 USB메모리, SSD RAM처럼 실행가능코드 저장
읽기 느림 빠름
쓰기 빠름 느림
가격 저가 고가

 

 

'프로그래밍 > 컴퓨터시스템' 카테고리의 다른 글

PCIe(PCI Express) Bus  (0) 2020.04.21
가상메모리 (Virtual Memory)  (0) 2020.02.18
GPU(Graphic Processing Unit)  (0) 2019.12.31

최근 PC 및 Embedded 시스템에서 가장 많이 사용하는 "PCI Express" 고속 Bus에 대해 설명하기 전에

먼저 PCI Bus에 대해 간략히 알아보고 PCIe를 설명하겠습니다.

 

PCI 란?

- 인텔이 개발한 업계 표준의 고속 버스

- PCI(Peripheral Component Interconnect) 아키텍처는 주변 장치 연결을 위해 ISA(Industry Standard Architecture bus), EISA, MCA, VESA 등의 버스 표준을 대체하기 위해 설계되었다. 오늘날 PC에서 가장 널리 사용되는 버스 규격이다.

PCI의 특징은 다음과 같다.

  • 더 빠른 전송 속도의 달성
    • 33Mhz 클럭부터 시작하여 66Mhz까지가 가장 많이 사용된다. (25Mhz 시스템도 있다.)
    • PCI/X에서는 66Mhz, 133Mhz, 266Mhz 등으로 발전되었다. (533Mhz 도 시도되었다.)
  • 플랫폼 독립성
    • 일부 플랫폼에 종속되지 않고 대부분의 플랫폼에서 사용된다.
    • 예) x86, IA-32, IA-64, Alpha, MIPS, PowerPC, ARM, …
  • 디바이스 추가/제거의 편이성
    • 버스에 장치가 쉽게 연결되고 해제될 수 있는 구조를 채택하였다.

PCIe (PCI Express)란?

- 기존의 PCI 프로그래밍 개념 및 통신 표준을 사용하지만 최신 컴퓨터의 속도 증가에 따라 성능이 향상된 차세대 PCI 기술이다. 실질적으로 PCI Express는 원래 PCI 버스 데이터 전송 속도의 두 배이다.

- PCI버스의 기술적인 한계로, 시리얼 방식의 규격으로 개발된 인터페이스

- PCI와 PCIe는 엄연히 다른 기술이며, PCI 보드 호환성처럼 PCI와 PCIe의 호환성은 전혀 없다.

 

PCI Express의 통신속도, 대역폭

'프로그래밍 > 컴퓨터시스템' 카테고리의 다른 글

Flash Memory  (0) 2022.05.31
가상메모리 (Virtual Memory)  (0) 2020.02.18
GPU(Graphic Processing Unit)  (0) 2019.12.31
N = input()

bring = []
result = 0

for i in N:
    p = int(i)
    
    if p not in bring:
        if p == 9:
            if 6 in bring:
                bring.remove(6)
                continue
        elif p == 6:
            if 9 in bring:
                bring.remove(9)
                continue
                
        for j in range(10):
            bring.append(j)
        result += 1
        bring.remove(p)
        
    else:
        bring.remove(p)
        
print(result)
N = int(input())
n_vote = []

for i in range(N):
    n_vote.append(int(input()))
    
cand = n_vote[1:len(n_vote)]
dasom = n_vote[0]
    
if(N == 1):
    print(0)

else:
    num = 0
    cand = sorted(cand, reverse = True)
    while(cand[0] >= dasom):
        dasom += 1
        cand[0] -= 1
        num += 1
        cand = sorted(cand, reverse = True)

    print(num)

'프로그래밍 > 알고리즘' 카테고리의 다른 글

[Python] 백준 1475번 : 방 번호  (0) 2020.04.13
[Python] 백준 2309번 : 일곱난쟁이  (0) 2020.02.18
[Python] 백준 2217번 : 로프  (0) 2020.02.18
a = []
for i in range(9):
    a.append(int(input()))
sum = 0
for i in a: sum += i

not_nanzang = sum - 100
a.sort()
i = 0
while(not_nanzang > a[i] + a[8]):
    i += 1

for i in range(i,8):
    for j in range(i+1,9):
        if(a[i] + a[j] == not_nanzang):
            num1 = a[i]
            num2 = a[j]
            break;
a.remove(num1)
a.remove(num2)

for i in a:
    print(i)

 

k = int(input())
max_lope = []
a = 0
for i in range(k):
    a = int(input())
    max_lope.append(a)
    
max_lope.sort()

max_weight = 0
for i in range(k):
    m = max_lope[i] * (k - i)
    if(m > max_weight):
        max_weight = m

print(max_weight)

※ 가상메모리

RAM을 관리하는 방법의 하나로 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식

 

 - Virtual address ( Logical address )

  가상으로 주어진 주소

  프로세스마다 독립적으로 갖는 (가상의)공간으로 각 프로세스마다 0번지부터 시작

  사용자 입장에서 바라보는 주소 공간

 

 - Physical address

  실제 메모리 상에서 유효한 주소

  메모리 관리자의 입장

 

 - 메모리 관리 장치(MMU) : 가상 주소 공간을 물리 주소로 매핑해주는 하드웨어 디바이스

 

 

'프로그래밍 > 컴퓨터시스템' 카테고리의 다른 글

Flash Memory  (0) 2022.05.31
PCIe(PCI Express) Bus  (0) 2020.04.21
GPU(Graphic Processing Unit)  (0) 2019.12.31

*mem- : 메모리관련함수

 

- memset(메모리 시작포인터, value, 메모리 공간 크기)

 메모리 블록을 시작포인터부터 num개의 바이트를 value값으로 채운다.

 이때 value는 unsigned char로 형변환 된다.

#include <string.h> // C++ 에서는 <cstring>

void * memset ( void * ptr, int value, size_t num );

 

 

- memcpy(복사 받을 메모리 공간, 복사할 메모리 공간, 메모리 공간 크기) 

- memmove(복사 받을 메모리 공간, 복사할 메모리 공간, 메모리 공간 크기)

  복사할 메모리공간의 값을 복사받을 메모리공간에 메모리 공간 크기 만큼 복사

void * memcpy ( void * destination, const void * source, size_t num );
void * memmove ( void * destination, const void * source, size_t num );

  * memcpy 와 memmove 의 차이점

  · memcpy는 메모리를 직접 복사하고, memmove는 임시 공간에 저장한 후 판단하여 다시 복사

    => memmove가 memcpy에 비해 안정성이 높음

  · memcpy는 memmove 보다 안정성이 떨어지지만, 임시 공간을 거치지 않고 바로 복사하기 때문에 속도가 빠름

 

 

- memcmp(비교할 값, 비교할 값, 데이터 개수)

 메모리 공간을 비교

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

 

- memchr()

 특정 문자 위치를 찾아줌

#include <string.h>

void *memchr(const void *buf, int c, size_t count);

 

'프로그래밍' 카테고리의 다른 글

Convolution Filter(Kernel) Size  (0) 2020.01.02

+ Recent posts