• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

메모리공간의 주소?

20.04.25 10:19 작성 조회수 1.62k

4

강의초반부에

메모리를 구현하실때 4바이트짜리 int는 주소를 4칸차지.. 이렇게 하셨는데 그럼 메모리 공간속에서 가장작은 단위는 1바이트가 되는건가요?

그리고 실제와 차이가 있다 하셔서 여쭈는데 ,

메모리공간의 주소도 100 ,101이렇게 간단한 숫자가 아닌것 뿐이지 컴퓨터는 모든걸 숫자로 다루니 결국 숫자인것이지요?

답변 4

·

답변을 작성해보세요.

13

코드쉼터님의 프로필

코드쉼터

2020.04.25

"일반적"으로 1바이트가 메모리를 읽는(접근 가능한) 단위이기에 그렇습니다. (옛날옛적에 4비트 단위로 사용하는 컴퓨터도 있었답니다. 보진 못했지만)

현대 운영체제에서는 실제로 메모리 공간을 RAM, SSD, HDD 어디에서든 할당 가능하며,

사용자가 사용하기 편하게 숫자 (주소값) 을 가상적으로 운영체제가 부여한 것 뿐입니다.

 

< 왜 1비트씩 안나누고 그렇게 크게 나눠서 사용하죠? >

만약 1비트씩 메모리를 읽는다고 하면 메모리 크기만큼 메모리 주소 공간을 표현해야 하기 때문에 메모리 주소 표현에만 메모리를 거의 다 써버리게 됩니다... 그래서 메모리를 1바이트 단위로 나눠서 사용하는 것입니다.

(예를들어 주소값으로 표현하면 0x00000001 와 0x00000002 는 1바이트 (8비트) 만큼 간격이 떨어져 있습니다.)

 

극단적인 예로 4비트 메모리를 사서 메모리를 1비트 단위로 사용하는 운영체제를 직접 만든다고 해봅시다. (4비트로는 이진수 0000 ~ 1111 까지 표현할 수 있으므로 십진수로는 0~15 를 표현 가능합니다.)

그런데 1비트씩 주소를 할당한다면 우리가 메모리를 모두 활용하기 위해서는 주소가 4개 (0x0 , 0x1, 0x2, 0x3) 나 필요한 것을 알 수 있습니다. 주소 4개를 표현하기 위해서는 최소 몇비트(이진수 몇자리)가 필요하죠? 네 맞습니다 2비트가 필요합니다 (이진수로 00, 01, 10, 11)

에고 주소 표현에만 벌써 2비트를 써버렸네요.. 메모리의 주소를 하나만 저장해도 메모리의 "절반"을 사용하지 못하게 되어버립니다.

(돈을 많이 벌어서 8비트 메모리로 업그레이드 해도 여전히 주소 하나를 저장하는데 전체 메모리의 거의 "절반" 을 써야 합니다. ㅜㅜ)

 

< 근데 왜 하필 8비트 (1바이트) 씩 나누는거죠? 더 크게 나누면 좋을 것 같은데요? >

이건 옛날에 컴퓨터를 만든 사람이 1바이트를 기준으로 메모리를 만들었고, 잘 팔렸기 때문입니다... 라고 설명하면 너무 날로먹는 설명인 것 같아서 좀더 자세히 설명드리자면.

숫자와 영문자를 저장하기 위한 코드표 "아스키 테이블"을 아실 겁니다.

옛날에는 지금처럼 이미지, 동영상, 음악등을 감상하기보다는 그냥 텍스트를 출력하거나 숫자를 연산하는게 주된 컴퓨터의 업무였습니다.

8바이트면 숫자, 특수문자, 영어 알파벳을 충분히 표현하고 남기에 8비트로 표준을 정한 것입니다.

정확히 말하자면, ISO 라는 기관에서 정한 국제표준 "ISO/IEC 80000" 입니다.

(국제표준인데 안따르면 국제적으로 왕따당하겠죠..?)

 

+ 노파심에 말씀드리면, 메모리 접근 단위(크기)는 단순 운영체제를 만들때만 결정되는 문제는 아닙니다..

CPU, RAM, 보조기억장치 등 여러 장치에서 이미 8비트를 기준으로 아키텍쳐(설계) 를 만듭니다.

따라서 이러한 CPU, RAM 등을 효율적으로 사용하기 위해서라도 8비트를 기준으로 메모리를 엑세스 할 수 있게 OS 를 만든 것이라고도 보시면 되겠습니다.

1

Jungmin님 저보다 잘 아시네요 ㅎㅎ 혹시 도우미(?)일 관심 있으시면 연락주세요. 

1

와 진짜 너무 감사드립니다!!!!!! 

0

코드쉼터님의 프로필

코드쉼터

2020.04.26

그럴리가요.. ㅎㅎ 저도 만들어주신 강의보고 배운게 많았어요.

아직 저는 학생 신분이라서 정식(?) 도우미는 조금 부담스럽지만 5월 중순부터는 시간적 여유가 생길 것 같아요.

시험 끝나면 메일 드릴께요.