
1. 하드웨어
1.1. CPU
1.1.1. Control Unit(제어 장치)
1.1.1.1. 명령 제어장치로서 입력된 명령어를 해독하여 cpu의내부 움직임을 통제함. 주로 데이터를 메모리로부터 ALU로 옮기라는 명령, 다시 메모리로 옮기는 명령을 내림
1.1.2. ALU(연산 장치)
1.1.2.1. 가산기 보수기 누산기 데이터 레지스터
1.1.3. Register
1.1.3.1. PC : 다음 fetch 될 명령어의 주소를 가지고 있는 레지스터 AC : 연산 결과를 일시적으로 가지고 있는 레지스터 IR : 가장 최근 인출될 명령어가 저장되어 있는 레지스터 SR : 현재 CPU의 상태를 가지고 있는 레지스터 MAR : PC에 저장된 명령어 주소가 사용되기 전 일시 저장 되는 주소 레지스터 MBR : 기억장치에 저장될 데이터 혹은 읽혀진 데이터가 일시적으로 저장되는 버퍼 레지스터
1.1.4. memory와의 관계
1.1.4.1. 1. 메모리에 올라온 명령어(보통 4개 정도)를 Input/Output BUS 인터페이스를 통해 읽음(fetch)
1.1.4.1.1. 버스종류
1.1.4.2. 2. 읽어들인 명령어를 cpu내부에 저장하고 명령어의 종류를 구분(decode)
1.1.4.3. 3. 명령어가 가리키는 레지스터를 내부 물리적 레지스터로 매핑(rename)
1.1.4.4. 4. 명령어가 실행하기 위한 대기열에 명령어 입력(dispatch)
1.1.4.5. 5. 명령어가 실행될 수 있으면 실행하기 위한 장치로 이동시키고 프로그램이나 우선수위에 따라 뒤에 명령어가 먼저 실행될 수 있음(issue)
1.1.4.6. 6. 제어장치와 ALU와의 통신(execution)
1.1.4.7. 7. 명령어대로 처리 완료된 결과값을 레지스터에 쓰고 결과 값을 기다리고 있던 명령어가 있으면 결과가 생겼다고 알려줌(writeback)
1.1.4.8. 8. 명령어 수행을 완료하고, 명령어 실행을 위해 할당 받은 자원을 모두 반환하고 명령어 실행 결과를 사용자에게 노출함(commit)
1.2. RAM(memory)
1.2.1. 맨위(0x00000000)
1.2.2. Code
1.2.2.1. 현재 프로세스에서 실행중인 프로그램의 바이너리 코드 저장
1.2.3. Data
1.2.3.1. 전역, 정적변수 중 초기화 한 값을 저장
1.2.4. BSS
1.2.4.1. 전역, 정적변수 중 초기화 하지 않은 값 저장
1.2.5. Heap
1.2.5.1. 사용자가 직접 관리해야 하는 메모리 영역, 사용자에 의해 메모리 공간이 동적으로 할당 해제됨
1.2.5.2. heap이 stack으로 넘어가는 경우가 heap overflow가 발생한다.
1.2.6. 공유 라이브러리
1.2.6.1. heap과 stack사이에 위치
1.2.7. Stack
1.2.7.1. 스택은 높은 주소부터 낮은 주소로 채워지고 늦게 저장된 데이터가 먼저 인출(LIFO)
1.2.7.2. 만약 heap으로 넘어가는 경우 stack overflow가 발생한다.
1.2.7.3. 함수의 호출과 관계되는 지역,매개변수가 저장되는 영역
1.2.7.4. Stack Frame
1.2.7.4.1. 함수가 생성될때 마다 생기는 블록 단위
1.2.7.4.2. 매개변수, RET(돌아갈 리턴주소), SFP(전에 사용한 ebp), 버퍼 순으로 생성
1.2.8. 커널
1.2.8.1. 스택은 아래에서 위로 쓰이기 때문에 커널영역을 침범할 일이 없음
1.2.8.2. 메모리가 4기가 정도면 1기가는 할당
1.2.9. 맨아래(0xFFFFFFFF)
1.3. ROM
1.3.1. 역할
1.3.1.1. 한번 기록한 정보가 전원유지와 상관없이 (반)영구적으로 기억되며 삭제나 수정이 불가능
1.3.1.2. 특히 펌웨어에 주로 사용되었기 때문에 ROM==Firmware로 부르기도 한다 최근 비싼 롬 메모리 대신 플래시 메모리 모듈을 부품에 저장해 펌웨어 저장용으로 쓰이기 때문에 엄밀히 틀린말이다.
1.3.1.3. 전력 공급과 무관하게 데이터가 유지되는 비휘발성이라는 강력한 특징이 있어서, 모든 종류의 기계에 쓰인다.
1.3.2. 종류
1.3.2.1. Mask ROM
1.3.2.1.1. 생산 과정에서 찍어낸 ROM으로 냉장고, 에어컨, 전자레인지등 대부분 가전제품에는 Mask ROM을 탑재하여 출시
1.3.2.2. PROM
1.3.2.3. EPROM
1.3.2.4. EEPROM
1.4. GPU
1.4.1. 그래픽 카드를 구성하고 있는 여러 부품중 하나로 중앙에 위치해 있음
1.4.2. 작은 크기의 칩셋 모양으로 그래픽 칩셋이라 불림
1.4.3. GPGPU
1.4.3.1. CPU가 맡았던 연산을 GPU에도 사용해 연산해서 속도를 향상시키는 기술 (하드웨어 가속)
1.4.4. 제조 회사
1.4.4.1. AMD
1.4.4.1.1. 2D의 이미지 색감
1.4.4.2. NVIDIA
1.4.4.2.1. 3D의 입체형이 강점
1.4.4.3. Intel
1.4.4.3.1. CPU내에 탑재되는 GPU용으로만 제작
1.5. 그래픽카드
1.5.1. 역할
1.5.1.1. 컴퓨터 화면에 이미지를 표시해주는 부품 전원이 켜짐과 동시에 일을 시작하는 부품
1.5.2. 종류
1.5.2.1. 내장 그래픽카드
1.5.2.1.1. CPU안에 탑재 되어 있는 GPU
1.5.2.1.2. 단순 문서작업 및 영상 시청등 최소한의 그래픽만 출력
1.5.2.2. 외장 그래픽카드
1.5.2.2.1. CPU밖에 있는 GPU
1.6. Mainboard
1.7. Storage
1.7.1. USB
1.7.2. SSD
1.7.3. HDD
2. 소프트웨어
2.1. 프로그램 실행 과정
2.1.1. 컴파일러
2.1.1.1. lib(.a), dll(.so)
2.1.1.1.1. .lib : 코드 실행에 필요한 함수가 실행파일 안에 포함
2.1.1.1.2. .dll : 코드 실행에 필요한 함수가 dll이라는 파일에 따로 포함
2.1.1.1.3. 차이점
2.1.1.2. 1. 입력 장치(키보드,마우스)로 프로그램 실행 (xx.c)
2.1.1.3. 2. 전처리기 : #include, #define 등 코드를 실행전 처리
2.1.1.3.1. #include<stdio.h> : STandarD Input Output. Header file
2.1.1.3.2. /usr/include/stdio.h
2.1.1.4. 3. 컴파일러 : 코드 내용들을 어셈블리어로 변경(mov, jmp, add, ret)
2.1.1.5. 4. 어셈블러 : 어셈블리어를 바이너리 코드 생성
2.1.1.6. 5. 링커 : 0과 1로 이루어진 코드들과 참조해야 하는 함수,라이브러리를 모아서 하나의 실행파일로 생성
2.1.1.6.1. windows : msvcrt.dll
2.1.1.6.2. linux : glibc
2.1.1.6.3. build = compile + linking
2.1.1.7. 6. 로더 : 링킹까지 한 결과물을 메모리에 로드
2.1.1.7.1. 1. 로드 순서는 프로그램 코드와 실행파일이 디스에서 메모리로 복사
2.1.1.7.2. 2. 운영체제는 프로그램을 메모리에 할당된 영역에 복사
2.1.1.7.3. 3. 프로그램의 초기값이나 리소스를 초기화
2.1.2. 인터프리터
2.1.2.1. #
2.2. OS 구조
2.2.1. Window
2.2.1.1. 구조
2.2.1.1.1. KernelMode
2.2.1.1.2. UserMode
2.2.1.2. 부팅순서
2.2.1.2.1. 1. 전원 공급 및 초기화 (Power-on self-test)
2.2.1.2.2. 2. BIOS 및 부트로더
2.2.1.2.3. 3. 커널 로드 및 초기화
2.2.1.2.4. 4. 레지스트리 및 프로세스 시작
2.2.1.2.5. 5. 로그인 화면
2.2.2. Linux
2.2.2.1. 구조
2.2.2.1.1. User
2.2.2.1.2. Utility
2.2.2.1.3. Shell
2.2.2.1.4. Kernel
2.2.2.1.5. HardWare
2.2.2.2. 부팅순서
2.2.2.2.1. 1. Rom BIOS
2.2.2.2.2. 2. MBR
2.2.2.2.3. 3. GRUB
2.2.2.2.4. 4. Kernel
2.2.2.2.5. 5. Init
2.2.2.2.6. 6. RunLevel