일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c4d
- 렌더링
- 윈도우 프로그래밍
- 윈도우
- 그래픽스
- 셰이더프로그래밍
- 오픈지엘
- Geometry Modeling
- 컴퓨터 구조
- 그래픽스기초
- window programming
- denoising
- 셰이더
- modeling
- win32
- 컴퓨터 아키텍쳐
- Graphics
- OpenGL
- 핵심 API로 배우는 윈도우프로그래밍
- MFC 윈도우 프로그래밍
- Win32 API
- 윈도우 구조
- 윈도우프로그래밍
- 운영체제
- bezier curve
- Mesh Processing
- shader programming
- MFC
- 베지에 곡선
- shader
- Today
- Total
오다기리 박의 알고리즘 노트
1장. 컴퓨터 구조에 대한 첫 번째 이야기 본문
1장. 컴퓨터 구조에 대한 첫 번째 이야기
1. 시스템 프로그래밍의 이해와 접근
시스템 프로그래밍이란?
시스템 프로그램 : 컴퓨터 시스템을 동작(파일 복사, 파일 이동)시키는 프로그램. (ex.Windows, UNIX)
운영 체제 < 시스템 프로그램
시스템 프로그래머
어셈블리 언어나 C를 이용하여 HW를 직접 컨트롤하는 개발자
Windows 나 UNIX 같은 운영체제에서 제공하는 라이브러리를 사용하여 프로그램을 개발하는 개발자
컴퓨터 시스템의 주요 구성요소
2. 컴퓨터 하드웨어의 구성
CPU
컴퓨터의 머리에 해당
메인 메모리(램)
컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역
ex. 하드디스크 안의 게임 실행 ->메인 메모리로 올라가서 실행됨
프로그램 실행을 위해 존재하는 메모리
입출력 버스
컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로
주고 받는 데이터의 종류와 역할에 따라
어드레스 버스
데이터 버스
컨트롤 버스
3. CPU에 대한 이해
ALU(Arithmetic Logic Unit)
실제 연산 담당하는 블록
기본적인 연산
산술연산 (덧셈, 뺄셈)
논리연산 (AND, OR)
컨트롤 유닛 (Control Unit)
CPU의 총 사령관 역할
CPU 내부로 흘러 들어오는 명령어를 해석하여 그 결과에 따라 적절한 신호를 CPU의 다른 블록에 보내는 일을 함.
ex) 프로그래머가 프로그램 작성 -> 컴파일 -> 실행파일 생성 -> 실행파일 안에는 CPU에게 일을 시키기 위한 명령어 (10011010 ~) 저장되있음 -> CPU내부로 흘러들어감 -> ALU가 명령어 해석 -> CPU의 다른 블록으로 보냄
레지스터 (Register Set)
2진 데이터 저장을 위한 아주 작은 메모리
CPU 내부에서 임시적으로 데이터를 저장하기 위한 작은 메모리 공간
CPU가 연산을 하기 위해 반드시 필요
ex) 컨트롤 유닛이 필요로 하는 명령어(덧셈, 뺄셈) 및 ALU 가 필요로 하는 데이터(피연산자)들을 레지스터에 저장해 두고 상황이 허락될 때 직접 가져가도록 함.
버스 인터페이스
입출력 버스가 어떻게 데이터를 전송하는지, 그에 대한 프로토콜, 통신방식을 알고 있는 것
ex) CPU는 버스 인터페이스를 통해 레지스터에 저장되어 있는 데이터를 입출력 버스에 송수신
입출력 버스에 연결되는 장치들은 모두 인터페이스(=컨트롤러,어댑터)가 필요.
클럭 신호 (Clock Pulse)
타이밍을 제공하기 위해 필요
ex) 클럭속도 1.6Mhz -> 클럭발생기(오실레이터)는 1초당 1,600,000번의 클럭발생 -> CPU가 1초에 1,600,000번 연산
시스템 동기화를 위해
CPU는 인가되는 클럭 펄스에 맞춰서 일을 한다.
4. 프로그램의 실행과정
폰 노이만의 컴퓨터 구조 (Stored Program Concept)
프로그램이 컴퓨터 내부에 저장되어서 순차적으로 실행되는 구조
프로그램의 실행과정
단계 1 : 전처리기에 의한 치환작업
#include, #define 같은 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업
단계 2 : 컴파일러에 의한 번역
소스코드 -> (컴파일러) -> 어셈블리 코드
CPU에게 일을 시키기 위한 명령어를 조합해서 만들어진 프로그램코드
단계 3 : 어셈블러에 의한 바이너리 코드 생성
1과 0으로만 구성되는 코드 (<ㅡ> 텍스트 코드)
어셈블리 코드 -> (어셈블러) -> 바이너리 코드
단계 4 : 링커에 의한 연결과 결합
링커 : 프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는다.
링커 작업에 끝나면 실행 가능한 실행파일(바이너리 코드로 구성)이 생성됨.
링커에 의해 최종적으로 만들어진 실행파일(바이너리 코드 형식의 명령어) -> 메모리 공간에 로드 -> CPU에 의해 실행되기 시작 -> CPU에 의해 순차실행 ->
1. Fetch : 메모리 상의 명령어를 CPU로 가져옴 -> 레지스터에 저장
2. Decode : 가져온 명령어를 CPU가 해석 -> 컨트롤 유닛 역할
3. Execution : 해석된 명령대로 CPU가 실행 -> ALU 역할
5. 하드웨어 구성의 재접근
폰 노이만 컴퓨터 구조 vs 오늘날 컴퓨터 구조
데이터 이동의 기반이 되는 버스 시스템
데이터 버스 : 데이터(명령어, 피연산자)를 이동하기 위해 필요
어드레스 버스 : 주소값을 이동하기 위해 필요
ex) CPU가 0x1024번지에 저장되어 있는 데이터 4바이트를 읽으려면 메모리 영역에 주소값 0x1024를 먼저 전달해야 함.컨트롤 버스 : CPU와 메모리가 서로 특별한 사인을 주고받는 용도
ex)
'운영체제' 카테고리의 다른 글
6장. 커널 오브젝트와 오브젝트 핸들 (0) | 2018.08.08 |
---|---|
5장. 프로세스의 생성과 소멸 (0) | 2018.08.08 |
4장. 컴퓨터 구조에 대한 두 번째 이야기 (0) | 2018.08.08 |
3장. 64비트 기반 프로그래밍 (0) | 2018.08.08 |
2장. 아스키코드 vs 유니코드 (0) | 2018.08.08 |