컴퓨터 시스템의 계층도
Application programs | ||
Operating system | ||
Processor | Main memory | I/O devices |
Software: Application programs, Operating system
Hardware: Processor, Main memory, I/O devices
컴퓨터 시스템 계층도는 위와 같이 되며
소프트웨어: Application programs, Operating system
하드웨어: Processor, Main memory, I/O devices
컴퓨터 하드웨어의 구조
하드웨어 구성요소
- 버스 buses
- 입출력 장치 I/O devices
- 주기억장치, main memory
- 캐쉬, cash memory
- 중앙처리장치, CPU(Central Processing Unit)
버스
- 구성요소간의 정보교환 통로
- 종류 : 시스템 버스, 입출력 버스
프로세서
중앙처리장치 CPU(Central Processing Unit)
산술논리연산장치: ALU(arithmetic and logic unit)
제어장치 : Control unit
레지스터
- 프로그램 카운터 PC
- 상태 레지스터
- 메모리 주소 레지스터
- 메모리 데이터 레지스터
- 명령 레지스터 IP(instruction pointer)
- 범용 레지스터(general-prupose register)
CPU
주요기능
- 기억장치로부터 명령/데이터 호출 및 저장
- 명령의 해석 : 제어장치
- 명령의 실행 : ALU
- 입출력 연산 : I/O
명령 주기 Instruction cycle
- 인출 fetch : PC에 의거하여 명령어를 가져옴
- 해독 decode : 명령어를 해석하여 제어 신호 생성
- 실행 execution : 가져온 명령어를 실행
- 결과저장 store : 실행 결과를 저장
운영체제 Operating System
운영체제란?
- 응용프로그램이 하드웨어를 효율적으로 사용할 수 있도록 도와주는 프로그램
목적
- 하드웨어 추상화(Hardware Abstraction)
- 시스템 인터페이스 추상화
운영체제의 관리대상
- 프로세스
- 메모리
- 입출력장치
- 소프트웨어 자원
개발자 필요할 땐? 필요할 때 필요한 만큼 쓰는 프리랜서 개발자 채용으로
deg.kr
hello.c 컴파일과정
위의 그림은 hello.c 를 컴파일하는 과정을 보여준다.
먼저 hello.c를 작성하면 pre-processor 즉 전처리기에서 전처리 작업을 한다.
전처리 작업이 끝나면 compiler로 가서 고급언어를 저급언어(어셈블리어)로 바꿔준다.
바꾼 후 저급어를 기계어 01001로 바꾼다.
바꾼 것을 Linker를 통해 실행시킨다.
이러한 과정이 컴파일 과정이다.
컴파일 과정을 이해하는 것이 중요한 이유
- 프로그램이 컴퓨터 내부에서 어떻게 처리되는지 이해할 수 있다.
- 대규모 프로그램 개발 과정을 이해할 수 있다
- 프로그램 성능을 개선할 수 있다
- 링크시에 발생하는 에러를 이해할 수 있다.
컴퓨터 구조
컴퓨터 구조는 위와 같다.
약간의 TMI를 더하자면 System bus에는 많은 전선다발이 있을 것이며
삼성의 DDR5 같은 메모리는 Main memory를 말한다.
위의 예시 hello.c를 가지고 어떻게 실행이 되는지에 대해 알아보자
hello 명령의 인식
위의 그림에 대해 설명을 진행해보자
먼저 우리는 USB controller에 연결된 키보드를 통해 "hello"를 입력할 것이다.
입력된 정보는 I/O bus를 통해 I/O bridge를 지나 Bus interface를 통해 레지스터에 임시적으로 데이터가 저장이 될것이다.
그 후 "hello"는 Main memory에 저장이 된다.
hello 프로그램의 로딩
dicsk 안에 저장된 실행 파일이 Main memory에 가게 된다.
hello 프로그램의 실행
disck에서 받은 실행파일을 받아 Main memory에서의 hello.c 데이터를 레지스터에 임시 저장하였다가 실행결과를 Display를 통해 보여주게 된다.
'시스템프로그래밍' 카테고리의 다른 글
[시스템프로그래밍] 3장 실수의 표현 및 처리 (1) | 2023.10.16 |
---|---|
[시스템프로그래밍]2장 정수의 표현(Data-Integer), 바이트 저장순서(Byte Ordering), 정수의 인코딩(B2U, B2T계산법), Signed와 Unsigned의 관계, (0) | 2023.09.19 |
댓글