일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- diamond inheritance
- c++ multi chatting room
- conversion constructor
- virtual function table
- c++ basic practice
- C++
- new&delete
- std::endl
- member function pointer
- this call
- placement new
- operator overloading
- discord bot
- return by reference
- constructor
- dynamic_cast
- virtual destructor
- std::vector
- 더 지니어스 양면포커
- std::ostream
- virtual inheritance
- suffix return type
- virtual function
- vector size
- pointer to member data
- increment operator
- vector capacity
- base from member
- std::cout
- delete function
- Today
- Total
I'm FanJae.
[System Programming] 프로그램의 실행과정 / 하드웨어 구성의 재접근 본문
1. 프로그램의 실행파일의 생성 과정
- 일반적으로 CPU를 디자인 하는 개발자는 명령어 체계도 디자인한다.
- 0011, 0010, 0100, 0101 등과 같이 명령어를 구성한 이후, 이 명령어에 각각의 이름을 넣어준다.
- ADD, MIN, MUL 등과 같이 말이다.
- 이러한 방식의 프로그래밍이 어셈블리 프로그래밍이다.
① 전처리기에 의한 치환작업
- C,C++에서 #으로 시작하는 지시자
- #include, #define 등
② 컴파일러에 의한 번역
- 단계 1에서 전처리 작업이 일어나도 여전히 C언어로 구성되어 있다.
- 보통 많은 컴파일러가 중간 코드에서 어셈블리 코드를 생성한다.
③ 어셈블러에 의한 바이너리 코드 생성
- 어셈블러가 이러한 어셈블리 코드를 받아서 바이너리 코드(기계어 코드)로 변환한다.
- 기계어 코드는 바이너리 파일로 저장되며, 실제 CPU가 실행 가능한 명령어이다.
④ 링커에 의한 연결과 결합
- 프로그램 내에서 참조하는 함수나 라이브러리를 하나로 묶는 과정이다.
- 즉, 실행파일을 생성해준다.
2. 프로그램 내장 개념(Stored Programming Concept)
- 과거에 프로그램은 메모리에 저장되지 않았다.
- 폰 노이만(John von Neumann) 아키텍처라고도 하며, 오늘날 컴퓨터 구조는 모두 이 형태를 띄고 있다.
- 명령어는 메모리에 저장되어, CPU에 의해 Fetcnh, Decode, Execution 되어야 한다는 것이 핵심이다.
① Fetch
- 메모리 상에 존재하는 명령어를 CPU 내부로 가져오는 작업이다.
- 일반적으로, Bus Interface를 통해서 이루어진다.
② Decode
- CPU 내부로 가져온 명령어를 CPU가 해석하는 단계이다.
- Control Unit에 의해서 해석된다.
③ Execution
- 해석된 명령어의 명령대로 CPU가 실행하는 단계이다.
- 일반적으로, ALU가 중심이 되어 연산을 진행하는 단계라고 생각하면 된다.
① Fetch : 어떤 프로그램이 실행을 위해 메모리에 올라가게 되면, I/O BUS를 통해 레지스터에 저장된다.
② Decode : 명령어를 해석하여, 어떤 작업을 수행할지 결정해준다.
③ Execution : ALU가 중심이 되어, 실제 연산을 수행한다.
3. 데이터 이동의 기반이 되는 버스 시스템
- 버스 시스템이란, 데이터를 이동하는데 있어서 사용되는 전송 경로를 의미한다.
3-1. CPU와 메모리 관점에서만 보는 버스
- 버스는 일반적으로 크게 3가지가 나뉜다.
- 데이터 버스, 어드레스 버스, 컨트롤 버스가 존재한다.
① 데이터 버스
- 데이터를 이동하기 위해 필요한 버스
- 여기서 데이터는 특정 명령어가 될 수도 있고, 연산에 필요한 피연산자(Operand)가 될 수도 있다.
② 어드레스 버스
- 주소값을 이동하기 위해 필요한 버스
- 메모리나 장치의 특정 주소를 지정하여, CPU가 데이터를 읽거나 쓰는 위치를 결정한다.
③ 컨트롤 버스
- 컨트롤 신호 이동
- 데이터 전송이나 메모리 접근의 제어 신호를 전송한다.
- 즉, CPU가 언제 데이터를 읽거나 쓸지, 메모리가 데이터를 읽거나 쓸 준비가 되었는지 신호를 전달하여 조절한다.
'System Programming' 카테고리의 다른 글
[System Programming] 프로그램 구현 관점에서 64비트 기반 프로그래밍 / 오류의 확인 (0) | 2024.09.11 |
---|---|
[SYSTEM PROGRAMMING] WIN32와 WIN64 (0) | 2024.09.09 |
[SYSTEM PROGRAMMING] MBCS와 WBCS 동시 지원 (0) | 2024.09.03 |
[System Programming] Windows 에서의 유니코드 (1) | 2024.08.30 |
[System Programming] 시스템 프로그래밍의 이해와 접근 (0) | 2024.08.25 |