컴퓨터
- 컴퓨터 하드웨어 위에서 컴퓨터 소프트웨어가 수행되는 장치
- Server Computer / Personal Computer(Desktop Computer) / Embedded Computer
- 자동차 내장 Computer : MCU(Microcontroller unit)이 CAN(Controller Area Network)로 연결
컴퓨터 유형별 사용 OS
Server Computer
- Node.js, Go, JAVA, Python(django) 등으로 프로그래밍
- UNIX, Windows Server → 은행이나 학교 시설같이 보안이 중요한 곳은 여전히 UNIX 사용
- Opensource 및 Cloud 활성화 이후 LINUX (google, Naver 등에서 사용)
Embedded Computer
- 주로 C를 사용하여 프로그래밍
- 대부분 LINUX 기반의 Android, Raspberry Pi, Tigen 등을 사용한다.
- VxWorks 등의 상용 RTOS나 FreeRTOS 등의 오픈소스 OS를 사용한다.
운영체제
- 컴퓨터 하드웨어 자원을 관리해주는 소프트웨어
- Kernel + System program을 지칭한다.
- Kernel : 메모리에 상주해서 항상 실행되는 프로그램
- System Program
- 컴퓨터를 활용하기 위해서 OS가 만든 프로그램 (파일 탐색기 등)
- OS가 설치될 때 같이 설치되는 프로그램
운영 체제의 기능
- 프로그램이 하드웨어를 몰라도 쉽게 활용할 수 있도록 interface제공 (system call)
- Abstraction
- 핵심적인 기능, 개념을 간추려내는 것 or 중요하고 필요한 부분을 통합하여 하나로 만드는 것
- Class에서 객체가 가지는 속성을 member와 member function으로 표현하는 것
- Encapsulation
- 객체의 속성과 method를 하나로 묶고, information hiding한다.
- Abstraction과 encapsulation기능을 제공하여 내부를 몰라도 사용자가 쉽게 사용할 수 있다.
- 컴퓨터 자원이 효율적으로 동작하도록 관리한다.
- CPU 관리(CPU 분배)
- Process/Thread 관리, Process 간 데이터 전달 및 공유 관리
- 메모리 관리
- Virtual Memory Management로 용량 이상의 프로그램 동작 등의 기능
- I/O 장치 관리
- SDD/HDD(보조 기억 장치)에 있는 파일을 관리하는 파일시스템 관리
- Graphical User interface 등 그래픽 장치 관리
- 마우스와 모니터 등의 입출력 장치 제어
- Sharing (Time/Space Multiplexing)
- Protection(컴퓨터 및 프로그램 보호)
- Fairness(resource 분배)
- Performance(동작 실행 향상)을 관리하는 기능 제공
Modern PC Architecture
Memory Controller Hub(System controller, North Bridge)
- CPU, RAM, 그래픽 카드 등 데이터 전송이 많은 부분을 지칭하며 South bridge와의 통신 관장한다.
AGP(Accelerated Graphics Port)
- 그래픽 카드가 컴퓨터의 메인 보드에 장착된다.
- 상당히 많은 데이터 전송이 필요하다
- pixel 1024 1024의 경우 : 1kilo(2^10) 1kilo = 1mega
- RGB를 표현하기 위하여 3Byte
- 초당 60Hz로 refresh
- 따라서 초당 180megabyte의 데이터 전송이 필요하다.
I/O Controller Hub
- 상대적으로 데이터 전송량이 적은 부분을 지칭한다.
- 컴퓨터에 부착된 각각의 장치와의 입출력을 담당한다.
컴퓨터 하드웨어
-
CPU, 메인 메모리(주기억장치), 보조기억장치, I/O 장치로 구성된 컴퓨터의 물리적 부품
-
bus형태로의 데이터 전송 : 한번에 하나의 데이터 전송 동작만 가능하다
-
레지스터 : CPU 내에 임시적으로 데이터를 저장하고 있는 저장소 (PC, IR, SP, PSW 등)
-
로딩 : 프로그램 동작에 필요한 프로그램과 리소스를 보조기억장치에서 주기억장치로 불러들인다
CPU
- 폰 노이만(aniac제작) 구조 : 메모리에서 명령어를 실행하고 다음 명령어를 읽어와 실행하는 구조
기본 동작
- 프로그램을 실행하기 위해서 보조기억장치에 있는 프로그램을 Memory로 Loading후 실행시킬 명령어를 IR에 저장하고 실행시킬 명령어의 주소를 PC에 저장한다.
- CPU는 메모리에서 명령어를 읽고 명령어를 수행하는 이 단계를 아주 빠르게 실행해주는 장치이다.
ALU(Arithmetic logic unit, 산술논리장치)
- 레지스터 : PC(Program Counter, 실행시킬 프로그램의 Address 저장) / IR(Instruction Register)
- IR(명령어를 저장하고 실행)의 명령어
- Arithmetic instructions : add, subtract, multiply, divide …
- Logical instructions : and, or, xor, not, shift …
- Control flow(branch) instructions : goto, if, call, return …
- Data instructions : load(메모리에서 CPU레지스터에 저장), store, move, input, output …
CU(Control Unit, 제어장치)
- 입출력 장치 간 통신 및 조율
- 레지스터 : PSW(Program Status Word, 상태표현), SP(Stack Pointer)
MMU (Memory Management Unit)
- Virtual Memory Management 기능을 제공한다.
CPU의 Booting 후 동작 (Bootstrapping in Linux)
-
CPU 스스로 초기화 후 고정된 위치(intel : 0xfffffff0 / ARM : 0)에 있는 명령어를 실행한다.
-
초기 실행하는 명령어는 ROM에 저장되어 있으므로 BIOS/UEFI로 이동하고, 하드웨어 초기화 및 테스트를 진행(POST : Power On Self Test)한다.
- BIOS (Basic Input/Output System), UEFI (Unified Extensible Firmware interface)
- Firmware : ROM에 저장되어 있는 소프트웨어 (HW, SW의 중간단계)
-
BIOS/UEFI가 Boot device를 찾고, Boot Loader(LILO/GRUB)를 메모리에 올리는 FETCH한다
-
MBR(Master Boot Record)에 BIOS가 있고, ESP(Efi System Partition)에 UEFI가 있다.
- LILO/GRUB이 BIOS/UEFI에게 제어권을 받은 후 Kernel을 메모리로 load한다
- kernel에 load 후 OS가 실행된다.
CPU 성능 개선
- 명령어를 줄임으로써 CPU Clock을 높이고 pipelining으로 성능을 높였으며, cache 메모리 사용으로 성능을 향상 시켰다.
Instruction Set Architecture(ISA)
- CISC vs RISC(Instruction의 개수 차이, 줄임으로써 성능 향상), 연산 논리 간단
- 명령어를 줄여서 표준화 하여 pipe lining기법을 적용하였다.
- 명령어를 줄임으로써 CPU제작도 용이 해졌으며, CPU Clock을 높일 수 있었다.
PipeLining
- 명령어를 읽어 순차적으로 실행하는 방법으로 하나의 명령어만 실행하는 것이 아닌 여러 개의 F-D-X-W 파이프를 동시에 실행하는 방법
- 다음 명령어를 미리 가져와 실행한다 : Jump가 될 수 있기 때문에 n배의 성능향상이 아니다.
- Fetch : 메모리에서 레지스터(IR)로 가지고 오는 행위
- Decode : 명령어를 해독 / Execute / Write Back(다시 메모리에 동작 결과를 저장)
Instruction-Level parallelism (ILP, 명령어를 동시에 실행시키는 방법)
- Superscalar : CPU가 동시에 실행할 수 있는 명령어를 계산하여 같이 실행
- VLIW : 하나의 긴 명령어에 여러 개의 실행어를 넣는다.
- Simultaneous multithreading
- Multi Core
- Concurrent : 하나의 코어에서 여러 개의 프로그램이 번갈아 가면서 수행
- Parallel : 여러 개의 코어에서 각각의 프로그램을 수행
Symmetric multiprocessing architecture(SMP)
- 병렬시스템 : 하나의 mainboard에 CPU를 여러 개 두어 구현한 시스템
- CPU를 여러 개 두고 하나의 메모리를 공유하는 구조
- Cf) NUMA
- CPU별로 메모리를 독립적으로 가지며 CPU간 Interconnect 되어있는 구조
- 과학/수학/기상 시뮬레이션 등 연산이 많이 필요한 슈퍼컴퓨터에서 사용한다.
Clustered system architecture(서버컴퓨터 등)
하나의 메인보드에 여러 개의 CPU를 둔 Standalone 컴퓨터를 네트워크로 연결하고, secondary straoge를 공유하는 구조 ( 병렬 시스템 + 분산시스템)
- 분산시스템 : 컴퓨터와 컴퓨터 간에 네트워크로 연결하고, 메모리를 공유하는 구조
I/O 장치
- 구성 : CPU + I/O Controller + I/O 장치
I/O instruction
- CPU가 I/O instruction을 I/O Controller의 레지스터에 전해 input/output 실행
- Direct I/O(intel) : CPU가 장치의 레지스터에 직접 명령을 작성해서 I/O Instruction을 내린다.
- Memory-mapped I/O(ARM) : 메모리의 Mapping된 위치에서 읽기/쓰기를 통해 I/O 요청 실행
I/O Controller의 레지스터
- IR, DR(Data Register, 명령어의 매개 변수를 저장한다.
- 기본 동작
- CPU가 I/O Controller에게 내린 I/O Instruction을 통해 I/O Request를 전달한다.
- CPU가 I/O장치의 속도보다 빠르기 때문에 I/O 장치의 실행이 끝남을 알아야한다.
- Programmed I/O : Polling방식을 통해 I/O 장치의 실행 종료 유무를 확인한다.
- Interrupt : I/O 장치가 동작이 끝났거나 예외 상황이 발생했을 때 알린다.
- CPU는 수행 중인 작업(레지스터 값)을 저장하고, Interrupt handler/interrupt service routine을 통해 interrupt를 처리하고, 운영체제가 실행된다. CPU는 원래 수행 중이던 작업으로 복귀한다.
- 또는 키보드에서 입력된 것을 CPU에게 알리기 위해 Interrupt를 보내거나 이더넷 네트워크와 같은 것에서 새로운 작업이 왔을 때 CPU에게 알리기 위해 Interrupt를 보낸다.
I/O 명령어
- Load : 메모리에서 데이터를 읽어가는 명령어 (메모리에서 CPU 레지스터에 데이터 저장)
- Store : 메모리에 데이터를 쓰는 명령어 (CPU레지스터에서 메모리로 데이터 저장)
- Input : I/O 컨트롤러 레지스터에서 데이터를 읽는 명령어
- Output : I/O 컨트롤러 레지스터에 데이터를 쓰는 명령어
- Move : 레지스터에서 레지스터로 데이터를 옮기는 명령어 (CPU, I/O, DATA를 오간다)
I/O method
Programmed I/O
- I/O 장치에서 데이터를 버스를 통하여 CPU 레지스터에 저장하고 다시 버스를 통하여 메모리로 저장하는 방식. Polling 방식을 사용한다.
- CPU를 거쳐야하기 때문에 지연 시간도 있으며, 입출력 동안 CPU가 IDLE상태가 된다.
Interrupt(HW Interrupt)
- CPU가 프로그램을 실행하고 있을 때, I/O 장치의 요청이나 예외상황이 발생하여 처리가 필요할 경우 CPU에게 알려 우선적으로 처리할 수 있도록 하는 Method
- Hardware 장치에서 발생시키는 interrupt(asynchronous)
- E.g) timer interrupt, Keyboard interrupt
Trap(SW Interrupt)
- application processes에서 발생시키는 interrupt(synchronous)
- E.g) system calls
Fault(Exception)
- CPU가 자기 자신에게 Interrupt를 걸고, OS를 실행시킨다.(synchronous)
- Divide by zero, page fault, protection fault
DMA
- CPU가 메모리를 사용하지 않을 때 CPU의 개입없이 I/O장치가 메모리에 직접 접근하는 방식
- CPU는 제어신호만 주고받으며 데이터 전송에는 관여하지 않으므로 자원의 낭비를 막는다.
- Disk와 같은 큰 데이터를 전달해야하는 경우 interrupt handler를 통해 interrupt를 전달하는 것이 아닌 memory buffer에 전달해야 한다. 하지만 bus방식에 따라 시간이 오래 걸릴 수 있으므로, DMA를 통해 CPU가 Memory를 사용하지 않을 때 buffer에 요청을 전달한다.
Application program 입장에서의 I/O