일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- leetcode 937
- airflow docker
- docker로 airflow 설치하기
- leetcode 561
- 데이터레이크와 데이터웨어하우스
- 문자열 조작
- 빅데이터를 지탱하는 기술
- ctf-d
- 머신러닝
- leetcode 819
- 블로그 이전했어요
- 올바른 변수명 짓기
- leetcode 49
- 배열
- Hortonworks Sandbox
- leetcode
- Hadoop
- leetcode 344
- Python
- leetcode 121
- leetcode 5
- 컴퓨터구조
- webcrawler
- 스파크 완벽 가이드
- wargame.kr
- leetcode 234
- leetcode125
- leetcode 238
- MapReduce 실습
- leetcode 15
- Today
- Total
HyeM
[윈도우즈시스템프로그래밍]_1장 컴퓨터 구조와 프로그래밍 본문
1장 컴퓨터 구조에 대한 첫 번째 이야기
[ 목차 ]
01. 시스템 프로그래밍의 이해와 접근
02. 컴퓨터 하드웨어의 구성
03. CPU에 대한 이해
04. 프로그램의 실행과정
05. 하드웨어 구성의 재접근
01. 시스템 프로그래밍의 이해와 접근
| 시스템 프로그램이란?
" 컴퓨터 시스템을 동작시키는 프로그램"
ex) 운영체제
| Windows시스템 프로그래밍이란?
" Windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것"
02 . 컴퓨터 하드웨어의 구성
- CPU : 중앙처리장치, 핵심적인 역할
- 메인메모리 : 프로그램 실행을 위해 존재하는 메모리 ( RAM 이라는 저장장치로 구성됨 ), 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역
- 입출력버스 : 컴퓨터의 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로 + 종류3가지
03 . CPU에 대한 이해
1. ALU (Arithmetic Logic Unit)
실제 연산을 담당하는 ALU 블록, 연산은 산술연산과 논리 연산 2가지로 나뉜다.
2. 컨트롤 유닛
명령어를 해석하고, 그 해석된 결과에 따라 적절한 신호를
CPU의 다른블록에 보내는 일
+실행파일 안에는 명령어가 저장되어있음. 명령어가 CPU 내부로 흘러 들어가야 CPU에게 일 시킬수 있음
3. CPU 내부 레지스터들
임시적으로 데이터를 저장하기 위한 조그만한 메모리 공간.
CPU의 종류에 따라서 그 개수와 형태가 다양함
* 레지스터 : CPU 내부에 존재하는 2진 데이터 저장을 위한 저장장치
4. 버스 인터페이스
CPU 내에는 I/O 버스의 통신 방식을 이해하고 있는것.
( 어떻게 데이터를 전송하는지, 그에대한 프로토콜 혹은 통신방식 알고 있음 )
CPU는 버스 인터페이스를 통해서 CPU 내부에 저장되어 있는 데이터를 I/O 버스에 실어보내거나,
I/O 버스를 통해서 전송되어 오는 데이터를 수신하기도 함
5. 클럭 신호 ( CPU의 구성요소는 x )
타이밍을 제공하기 위해 필요한 것
필요 이유 : 연산장치가 연산하는 속도 != 출력장치가 데이터를 가져가는 속도
=> 속도가 느린 장치의 장단에 맞추기
04. 프로그램의 실행과정
@폰 노이만 : 컴퓨터 기본 모델을 제시한 人
" 프로그램이라는 것이 존재하고, 이 프로그램은 컴퓨터 내부에 저장되어서 순차적으로 실행됨
'Stored Program Concept' : 실행되어야 할 프로그램이 컴퓨터 내부에 저장됨
@프로그램 실행과정
단계 1 : 전처리기에 의한 치환작업
: #으로 시작하는 지시자의 지시에 따라서 소스코드 변경
단계 2 : 컴파일러에 의한 번역
: 소스코드는 컴파일러에 의해서 어셈블리 코드로 변역됨
+ 어셈블리 코드 : CPU에게 일을 시키기 위한 명령을 조합해서 만들어진 프로그램언어
단계 3 : 어셈블러에 의한 바이너리 코드 생성
+바이너리 코드 : 텍스트 코드에 상대; 1과 0으로만 구성
+어셈블리 프로그래밍 : ADD MIN NUL 같은 방식으로 프로그램을 구현한 것
+ 어셈블러 : 어셈블리 코드를 CPU가 이해할수 있는 바이어리 코드로 바꾸어주는 프로그램
단계 4: 링커에 의한 연결과 결합
프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 (연결) 하는 작업
끝 : 이 과정이 끝나면 실제로 실행 가능한 실행파일 생성 ( 바이너리 코드로 구성됨)
=> 프로그램의 기본 실행은 Fetch, Decode, Execution
Fetch : 메모리상에 존재하는 명령어를 CPU로 가져옴 Decode : 가져다 놓은 명령어를 CPU가 해석(분석)하는 단계 Execution : 해석된 명령어의 명령대로 CPU 실행하는 단계 |
05. 하드웨어 구성의 재접근 [ 버스 시스템 ]
[ 버스 시스템 ] I/0버스
Q. 명령어의 Fetch를 위한 데이터 전송 경로가 어떻게 되나?
=> 버스시스템 ( 데이터를 이동하는데 있어서 사용되는 전송 경로 )
I/0버스 _ 여러 장치들이 데이터를 주고 받기 위한 통로
ex) Fetch연산 (메모리 -> CPU), CPU의 레지스터에 저장되어 있는 데이터를 메인 메모리에 저장( CPU -> 메모리)
종류 :
- 데이터버스 : 데이터(명령어 & 피연산자 ) 이동을 위한 버스
- 어드레스 버스 : 주소값을 이동하기 위한 버스 ( cpu가 0x1024의 데이터를 읽으려고 할때, 메모리영역에 주소값을 먼저 전달해야함 ; 메모리니는 해당 주소의 데이터를 전송하는 컨트롤러가 포함되어 있음 )
- 컨트롤 버스 : CPU가 원하는 바(사인)를 메모리에 전달할때 사용
정리 :
1. CPU가 메모리에 sign 전달 => 컨트롤버스
" 데이터를 보내라 / 데이터가 간다 ! "
2. 주소값을 주고 받음 => 어드레스버스
" s 0x1200에 있는걸로 / 0x1204번지에 "
3.실제 데이터 전송 => 데이터 버스
전체 정리 그림
위 글은 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 참고하여 정리한 글 입니다.