시스템(컴퓨터 시스템)의 범위 : 하드웨어 + 운영체제
시스템 프로그래밍 : 컴퓨터 시스템을 활용하느 소프트웨어 개발
시스템 프로그램 - 컴퓨터 시스템을 동작시키는 프로그램
windows 시스템 프로그래밍 - windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는것
응용소프트웨어 개발을 위해서는 시스템프로그래밍이 포함되어야한다.
컴퓨터 시스템(하드웨어 +운영체제)의 주요 구성요소
cpu - 캐쉬 <컴퓨터구조) - (운영체제> 메인메모리 - 하드디스크
CPU - 중앙처리장치 기본적으로 CPU가 연산을 담당
메인메모리 - 램이라는 저장장치로 구성됨, 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역 ,프로그램 실행을 위해 존재하는 메모리라고 생각하면됨
입출력버스 - 컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로.
주고 받는 데이터의 종류와 역할에 따라서 어드레스 버스,데이터 버스, 컨트롤 버스 이렇게 세 가지로 구분이됨
ALU - CPU내부 실제 연산을 담당하는 블록, 덧셈이나 뺼셈같은 산술연산이나 AND나 OR같은 논리 연산을 처리
컨트롤 유닛 - ALU는 프로그램이 컴파일된 실행파일안에 명령어를 이해할수없음 이를 해석해주는 구성요소가 컨트롤 유닛임, 컨트롤 유닛은 명령어를 해석하고 그 해석된 결과에 따라 적절한 신호를 CPU의 다른 블록에 보내는 일을함
레지스터 - CPU 내부 임시적으로 데이터를 저장하기 위한 조그마한 메모리 공간 2진데이터를 저장
버스 인터페이스 - 서로 데이터를 주고 받기위한 매개체(i/o BUS) CPU 내부의 매개체의 통신방식을 이해하고 있는 무언가(버스가 어떻게 데이터를 전송하는지 그에 대한 프로토콜 혹은 통신방식을 알고있음)
클럭신호 - 클럭신호는 CPU를 구성하는 요소는 아님 그러나 CPU를 구성하는 구성 요소에 제공되어야 하는 신호로서 아주 중요. 타이밍을 제공
폰 노이만 아키텍처 - 실행되어야 할 프로그램이 컴퓨터 내부에 저장됨
프로그램의 실행과정
전처리기 -> 컴파일러 -> 어셈블러 -> 링커
단계 1: 전처리기에 의한 치환작업
전처리기는 #으로 시작하는 지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을함
단계 2: 컴파일러에 의한 번역
소스코드를 어셈블리 코드(cpu에게 일을 시키기환 명령어를 조합해서 만들어진 프로그램)로 번역
단계 3: 어셈블러에 의한 바이너리 코드 생성
어셈블리 코드를 CPU가 이해할 수 있는 바이너리 코드로 번역
단계 4: 링커에 의한 연결과 결합
프로그램 내에서 참조하는 함수나 라이브러리들을 하나로 묶는 작업. 이과 정이 끝나면 실제로 실행 가능한 실행파일(바이너리 코드로 구성)이 생성됨
Stored Programe Concept
명령어가 CPU 내부로 이동된 다음 실행하는 3단계의 과정
단계 1. Fetch :메모리상에 존재하는 명령어를 CPU로 가져오는 작업이다
단계 2. Decode : 가져다 놓은 명령어를 CPU가 해석하는 단계
단계 3. Execution: 해석된 명령어의 명령대로 CPU가 실행하는 단계
데이터 이동의 기반이 되는 버스 시스템
버스시스템 : 데이터를 이동하는 데 있어서 사용되는 전송 경로. 주고 받는 데이터의 종류에 따라서 어드레스 버스,데이터 버스,컨트롤 버스 이렇게 3가지 요소로 구성됨
데이터 버스 : 데이터(명렁어혹은 연산에 피연산자 등등)를 이동하기 위해 필요한 버스
어드레스 버스 : 주소값을 이동하기 위해 필요한 버스 (데이터 버스를 통해 데이터를 전달받기위해선 출발지의 주소가 필요하기 때문)
컨트롤 보스 : cpu가 원하는 바를 메모리에 전달할때 사용됨
핵심 요약
명령어의 내용대로 연산을 하는 주 요소는 ALU, 명령어를 분석해서 해야 할 일을 결정하는 요소는 컨트롤 유닛
레지스터는 CPU내에 존재하는 저장장치
3.클럭 펄스의 필요성 : 클럭은 동기화를 위해서 필요한 장치이다. CPU는 인가되는 클럭 펄스에 맞춰서 일을 한다.
4.Fetch.Decode,Execution : 메인 메모리에 저장되어 있는 명령어를 CPU내부로 가져오고,컨트롤 유닛에 의해 분석된 다음 ,ALU에 의해 연산이 이뤄진다
5.버스 인터페이스 : cpu 내/외 부에있는 요소들은 서로 i/o bus를 통해서 데이터를 주고 받는다. 버스를 통해서 데이터를 주고 받기 위해서는 버스의 통신방식에 맞게 데이터 입출력을 돕는 인터페이스 장치가 있어야 하며, 이 인터페이스 장치를 가리켜 컨트롤러 혹은 어댑터라고 부른다.