• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    해결됨

질문이 여러가지가 있습니다 ㅠㅠ

24.04.19 21:43 작성 24.04.19 22:52 수정 조회수 91

0

1.어셈블리코드의 경우에는 CPU의 명령어라고 하셨는데 그렇다면 CPU에 의존적인 상황인데 왜 컴파일러마다 어셈블리코드가 달라질수있는건가요?

 

2. 같은 컴파일러로 다른 어셈블리코드가 나온다는거는 운영체제가 해당 CPU에 맞는 어셈블리변환을 해주는거 같은데 맞을까요?

 

3.RISC의 경우에는 어차피 연산 코드부분의 크기가 같기 때문에 해당 부분의 비트만 해석하면되지만

CISC의 경우에는 크기가 유동적이고 데이터도 바이트코드 연산코드도 같은 바이트 코드라면 CPU는 해당부분을 어떻게 구분하는지 궁금합니다 !

 

4.명령어의 크기는 일반적으로 워드 크기와 같을까요?

 

5.메모리 주소 하나당 크기는 메모리에의해서 결정지어지는건가요? 아니면 CPU에 의해서 결정지어지는건가요?

 

6.ALU가 계산을 할때 레지스터가 피연산자를 제공해주고 ALU는 계산된값을 레지스터에 담는다

해당 부분에서 제어장치의 제어신호없이 레지스터나 ALU가 각각 전달을 하는건가요? 아니면 모든 데이터 전달과정에는 반드시 제어장치의 제어신호가 포함된다고 보면될까요?

 

7. ALU계산결과가 레지스터값보다 큰경우엔 어떻게 되나요?

 

8.명령어 레지스터와 메모리버퍼 레지스터의 차이가 명확하게 이해가 가지않습니다 ..

메모리 버퍼는 데이터 버스를 통해서 데이터를 받긴하지만 그대로 명령어 레지스터로 전달을 해준다면 메모리버퍼레지스터에서 바로 명령어를 전달해줘도 되는데 두개가 구분되서 존재한다는거는 명확한 이유가 있을꺼같은데 잘 모르겠습니다

 

9.직접 주소 지정방식의 경우에는 ex)기존 오퍼랜드에 1바이트데이터를 저장할수있던것을

메모리 주소 참조를 통해 2바이트를 저장할수있기 때문에 데이터 크기가 커진다는게 이해가 갑니다.

간접주소 지정방식의 경우에는 하지만 이런식으로 데이터 크기자체가 커지는게 아닌

명령어 한개당 참조할수있는 주소가 많아지는거같은데 이게 맞을까요?

 

  1. 스택주소 지정방식에서의 스택은 프로세스 하나당의 스택 영역이 아닌 메모리에서 스택범위가 따로존재하는건가요? 그리고 검색해보니 해당부분이 커널영역이라고 하던데 맞을까요?

  2. 그리고 현재 대부분의 컴퓨터에는 MMU를 활용한 베이스지정레지스터 방식과 스택 방식이 사용이 되나요?

  3. 명령어 파이프라이닝에서 만약에 실행 단계 ALU계산단계에서 ALU가 한클럭에 끝낼수없는 복잡한 계산의 경우에는 인출 해석 여러번의 실행후 저장의 루틴인가요?

     

    아니면 여러번의 인출 해석 실행 저장의 루틴 방식일까요?

     

     

  4. 그리고 만약 슈퍼스칼라를 사용하게되면 같은 클럭내에서 실행이 겹치기떄문에 ALU를 명령어 2개가 사용이 되는데 구조적위험이 반드시 생겨서 아예 못할꺼같은데 아주 조금의 시간차를 동시에 실행하는것처럼 파이프라이닝을 구성하나요?

답변 2

·

답변을 작성해보세요.

0

안녕하세요

하나씩 답변드리겠습니다.

질문이 많아 질문당 답변이 짧을 수도 있다는 점 미리 양해부탁드립니다.

 

1.어셈블리코드의 경우에는 CPU의 명령어라고 하셨는데 그렇다면 CPU에 의존적인 상황인데 왜 컴파일러마다 어셈블리코드가 달라질수있는건가요?

 

컴파일러에 따라서 최적화 등 제공하는 기능이 다르기 때문입니다.

2. 같은 컴파일러로 다른 어셈블리코드가 나온다는거는 운영체제가 해당 CPU에 맞는 어셈블리변환을 해주는거 같은데 맞을까요?

하나의 원인이라 보기는 어렵습니다.

같은 컴파일러라도 버전에 따라 다른 결과가 나올 수 잇고,

컴파일 과정에서 사용되는 라이브러리에 따라서도 다를 수 있습니다.

이 부분을 보다 깊고 자세히 이해하시려면 시스템 프로그래밍을 학습해보심을 추천드립니다.

 

3.RISC의 경우에는 어차피 연산 코드부분의 크기가 같기 때문에 해당 부분의 비트만 해석하면되지만

CISC의 경우에는 크기가 유동적이고 데이터도 바이트코드 연산코드도 같은 바이트 코드라면 CPU는 해당부분을 어떻게 구분하는지 궁금합니다 !

상세하게는 CPU 업체마다 다릅니다. 일반적으로는 제어 장치가 명령어를 해석한 결과가 해석 가능한 명령어에 맞게 정해져 있습니다

 

4.명령어의 크기는 일반적으로 워드 크기와 같을까요?

일반적으로 그렇습니다 

5.메모리 주소 하나당 크기는 메모리에의해서 결정지어지는건가요? 아니면 CPU에 의해서 결정지어지는건가요?

 

질문이 다소 모호한 것 같습니다. 컴퓨터의 부품은 설계 시에 다른 부품과의 호환이 중요하기에 둘 중 하나에 의해서만 결정되지 않습니다.

6.ALU가 계산을 할때 레지스터가 피연산자를 제공해주고 ALU는 계산된값을 레지스터에 담는다

해당 부분에서 제어장치의 제어신호없이 레지스터나 ALU가 각각 전달을 하는건가요? 아니면 모든 데이터 전달과정에는 반드시 제어장치의 제어신호가 포함된다고 보면될까요?

 

제어신호가 포함됩니다.

7. ALU계산결과가 레지스터값보다 큰경우엔 어떻게 되나요?

오버플로우가 발생합니다. 플래그 레지스터의 오버플로우를 참고해 보세요 

8.명령어 레지스터와 메모리버퍼 레지스터의 차이가 명확하게 이해가 가지않습니다 ..

메모리 버퍼는 데이터 버스를 통해서 데이터를 받긴하지만 그대로 명령어 레지스터로 전달을 해준다면 메모리버퍼레지스터에서 바로 명령어를 전달해줘도 되는데 두개가 구분되서 존재한다는거는 명확한 이유가 있을꺼같은데 잘 모르겠습니다

 

명령어 레지스터에 담기기 전에 저장되는 임시 공간을

메모리 버퍼 레지스터라고 이해해주길 바랍니다.

명령어를 하나씩 읽지 않는다는 점에 유의하여 생각해보세요 :)

9.직접 주소 지정방식의 경우에는 ex)기존 오퍼랜드에 1바이트데이터를 저장할수있던것을

메모리 주소 참조를 통해 2바이트를 저장할수있기 때문에 데이터 크기가 커진다는게 이해가 갑니다.

간접주소 지정방식의 경우에는 하지만 이런식으로 데이터 크기자체가 커지는게 아닌

명령어 한개당 참조할수있는 주소가 많아지는거같은데 이게 맞을까요?

 

맞습니다

  1. 스택주소 지정방식에서의 스택은 프로세스 하나당의 스택 영역이 아닌 메모리에서 스택범위가 따로존재하는건가요? 그리고 검색해보니 해당부분이 커널영역이라고 하던데 맞을까요?

 

정확히는 프로세스마다 프로세스가 사용 가능한 사용자 영역과 커널 영역의 스택 영역이 모두 있습니다. 관련하여 커널 스택이라 검색해보세요

 

  1. 그리고 현재 대부분의 컴퓨터에는 MMU를 활용한 베이스지정레지스터 방식과 스택 방식이 사용이 되나요?

     

     

    네 MMU, 베이스 레지스터 모두 사용됩니다.

     

     

     

  2. 명령어 파이프라이닝에서 만약에 실행 단계 ALU계산단계에서 ALU가 한클럭에 끝낼수없는 복잡한 계산의 경우에는 인출 해석 여러번의 실행후 저장의 루틴인가요?

    아니면 여러번의 인출 해석 실행 저장의 루틴 방식일까요?

     

 

CISC를 설명드릴 적에 언급하여 드렸듯 CPU마다 지원하는 명령어 종류가 다를 수 있습니다. 여러 클락에 걸쳐 실행되는 명령어가 있을 수 있고 그렇지 않은 명령어도 있습니다.

 

  1. 그리고 만약 슈퍼스칼라를 사용하게되면 같은 클럭내에서 실행이 겹치기떄문에 ALU를 명령어 2개가 사용이 되는데 구조적위험이 반드시 생겨서 아예 못할꺼같은데 아주 조금의 시간차를 동시에 실행하는것처럼 파이프라이닝을 구성하나요?

 

슈퍼스칼라를 사용 가능한 CPU의 경우 구조적 위험이 발생하지 않게 레지스터, ALU 등이 여러 개 존재합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.20

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 대해 제공된 정보에 따라 답변드릴 수 있는 부분이 없어 보입니다.

제공된 정보는 Spring Boot 문서 및 인프런의 로드맵과 수강 전 문의 기능에 관한 내용이 주를 이루고 있습니다. 컴퓨터 구조, 운영체제, 어셈블러 코드, CPU, 기타 컴퓨터 공학 관련된 세부적인 내용에 대한 직접적인 정보는 포함되어 있지 않습니다.

컴퓨터 구조 및 운영체제, 어셈블리 언어 등에 대한 질문은 전문적인 컴퓨터 공학 자료나 교육 강의, 해당 분야의 전문 포럼 또는 커뮤니티에서 더 자세한 답변을 얻으실 수 있을 것입니다.

추가 교육 자료나 정보를 원하신다면, 인프런에서 관련 강의를 찾아보시는 것도 추천드립니다.

질문에 대한 명확한 답변을 드리지 못해 죄송합니다. 다른 질문이 있으시면 도와드릴 준비가 되어 있습니다.