Skip to content

컴퓨터 구조에서 CPU에 대해서 배운 내용에 대한 불완전한 학습 정리

Notifications You must be signed in to change notification settings

scorbiclife/cpu-learning-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

"개발자를 위한 컴퓨터공학 1 - 혼자 공부하는 컴퓨터구조 + 운영체제" CPU 실습

  • 강의

  • 개발 일지

  • 구조

    • src 폴더에서 확인할 수 있습니다.
      • 테스트 파일은 소스 파일과 같은 디렉터리 내에 두었으며, 빠른 파악을 위해서라면 테스트 코드에서 가상 cpu의 명령어 코드의 예시들을 확인하는 것을 권장드립니다.
  • 디자인 결정들

    • 32비트의 고정된 길이의 명령어, 1비트 opcode, 1bit register operand, 2bit data operand

      • 초기에 가변 길이 명령어를 사용하였으나, fetch, decode, execute 각 단계마다 명령어 종류에 따라 switch문을 실행하는 것이 번거로울 것 같아 고정된 길이를 사용하였습니다.
      • 가변 길이 명령어를 사용하는 일부 CISC CPU들이 마이크로코드를 사용한다는 것을 확인하였기 때문에, 실제 CPU의 작동 방식과 점점 멀어지고 자료 조사 과정에서 학습의 어려움이 있었습니다.
    • 32비트 워드, 16비트 주소공간 아래에 수정

      • 기존에 16비트 워드, 16비트 주소공간, 32비트 길이 명령어를 만들었습니다. 그런데 fetch 한 번을 위해 메모리에 여러 번 접근하는 것이 아쉬웠습니다.
      • 명령어 크기를 32비트로 만들 경우 Immediate addressing mode에서 사용할 수 있는 값이 16비트로 한정되어 있다는 것이 새로운 고려 대상이었습니다. 그래서 기존의 LOAD_IMMEDIATE 명령어를 LOAD_IMMEDIATE_1, LOAD_IMMEDIATE_2로 바꾸어 각각 {least, most} significant 16비트를 세팅할 수 있도록 하였습니다.
      • fetch, decode, execute을 분리하여 구현하기 더 편해졌습니다.
      • 참고 자료
    • 32비트 워드, 32비트 주소공간

      • 기존의 16비트 주소공간을 indirect addressing을 통해 32비트 주소공간을 사용할 수 있도록 수정하였습니다.
  • 소스코드의 모듈화에 관하여

    • Cpu 클래스 하나에 담고 싶었으나, 내용이 너무 많아 다른 클래스들에 일부분을 떼어냈습니다.
    • 'CPU의 구성요소와 instruction cycle 살펴보기'와 '코드를 읽기 편하게 모듈화하기'의 두 가지를 신경썼지만, 결론적으로 둘 다 약간 아쉽게 된 것 같습니다.

About

컴퓨터 구조에서 CPU에 대해서 배운 내용에 대한 불완전한 학습 정리

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published