본문 바로가기
Computer Science/시스템 프로그래밍

시스템 프로그래밍과 컴퓨터 엔지니어링의 전반적인 소개

by 큌 2024. 3. 2.
반응형

시스템 프로그래밍 개요

  • 시스템 프로그래밍이란?
    • 운영 체제, 컴퓨터 하드웨어와 밀접하게 작동하는 소프트웨어를 개발하는 과정이다.
    • 이는 컴퓨터의 기본적인 작동 원리와 효율적인 자원 관리 방법을 이해하고, 이를 바탕으로 안정적이고 빠른 시스템 소프트웨어를 만드는 데 중점을 둔다.
  •  컴퓨터란?
    • 컴퓨터는 프로그래밍 가능한 전자 장치로, 다양한 종류의 작업을 자동화하여 수행할 수 있다.
    • 이는 복잡한 계산부터 문서 편집, 멀티미디어 처리에 이르기까지 광범위한 작업을 처리할 수 있는 범용성을 가지고 있다.
  • 컴퓨터 사이언스란?
    • 컴퓨터 사이언스는 계산과 정보의 이론적 기반을 탐구하고, 이를 통해 다양한 문제를 해결하는 방법을 연구하는 학문이다.
    • 이는 계산 이론, 알고리즘의 설계 및 분석, 그리고 컴퓨터 시스템의 설계와 같은 분야를 포함한다.
    • 컴퓨터 사이언스는 단순히 컴퓨터 자체에 대한 학문이 아니라, 컴퓨터를 사용하여 PC 뒤의 문제를 해결하는 데 필요한 논리와 규칙에 대해 배우는 것이다.
  • 컴퓨터 엔지니어링이란?
    • 어떻게 컴퓨터 하드웨어가 디자인 되어 있는지
    • 소프트웨어가 어떻게 하드웨어를 컨트롤 하는지
    • 컴퓨터 하드웨어가 어떻게 설계되고 소프트웨어가 하드웨어를 제어하는지 이해
    • HW: VLSI 칩, 아날로그 센서, 혼합 신호 회로 기판 등 설계
    • SW: 임베디드 마이크로컨트롤러용 소프트웨어 및 펌웨어 작성, 운영체제 설계 등
      • 컴퓨터 사이언스는 소프트웨어에 집중
      • 컴퓨터 엔지니어링은 하드웨어에 집중
  • IT는 소프트웨어
    • 소프트웨어
      • 시스템이 구축되는 물리적 하드웨어와는 대조적으로 인코딩된 정보 또는 컴퓨터 명령으로 구성된 컴퓨터 시스템의 일부
      • 고급 프로그래밍 언어로 쓰여짐
      • 컴파일러나 인터프리터를 통해 기계어 혹은 이진수로 변환
    • 소프트웨어는 기본적으로 자연어 알파벳을 사용하여 기계어를 모호하게 연상시키는 저수준 어셈블리 언어로 작성 가능
      • 어셈블러가 기계어로 변환
    • 가장 낮은 수준에서 실행 가능한 코드는 개별 프로세서(일반적으로 CPU)에 특정한 기계어 명령으로 구성
    • 소프트웨어 개발에는 고급언어와 어셈블리어가 사용

어셈블리 프로그래밍이란?

  • 2021년 상위 10개 프로그래밍 언어로 어셈블리어도 많은 개발자가 사용
  • 아두이노 혹은 MCU를 통해 어셈블리  프로그래밍 할 수 있음.
  • MCU와 대화하기
    • Micro Controller Unit(MUC)
      • CPU, 메모리 및 I/O 인터페이스를 통합하는 단일 VLSI 칩의 소형 컴퓨터
  • MCU 프로그래밍 하기
    • MCU는 일반적인 컴퓨터에 비해 자원이 부족
      • 느린 CPU, 작은 메모리 등등
      • 이러한 자원을 효율적으로 사용하는게 중요 → 코드 최적화
    • 고급 언어는 어떤가?
      • 하드웨어 보다 훨씬 높은 단계의 추상화 제공
        • 변수, 메서드, 클래스, 반복 등등
      • 그러나 이것들은 하드웨어를 세밀하게 제어하기 힘듬
    • 어셈블리 언어는 코드 최적화에 적합
      • 어셈블리 언어는 기계어와 매우 근접
      • 세밀하게 MCU 제어 가능
        • 레지스터, 메모리 영역 등
        • 이를 위해서는 하드웨어가 어셈블리어를 통해 어떻게 작동하는지 이해해야 함
  • MCU는 어떤 언어를 이해하는가?

어셈블리 vs. 기계어

  • 각 언어는 라인 바이 라인으로 대응
  • 어셈블리 언어와 기계어는 직접적으로 대응되는 언어.
  • 각각의 언어 명령은 하드웨어에서 실행되는 명령에 대응됨.
  • 어셈블리 언어는 사람이 이해하기 쉬운 기호로 표현되며, 기계어는 이진수 형태로 표현됨.
  • 어셈블리 언어는 기계어에 비해 상대적으로 가독성이 높음.
    • 예를 들어, "MOV AX, 5"와 같은 어셈블리 명령은 사람이 이해하기 쉽고, 해당 명령은 레지스터 AX에 값을 5로 이동시킴.
  • 기계어는 이진수 형태로 표현되어 있어 직접 이해하기 어렵다.
  • 어셈블리 언어는 기계어와 일대일 대응되는 편리한 표현 방식을 제공하여 프로그래머가 하드웨어를 보다 쉽게 제어할 수 있도록 함.

왜 어셈블리어 사용할까?

  • 코드 최적화
  • 테스트 및 디버깅
    • 장치가 어떻게 동작하는지 실제로 볼 수 있다.
  • 리버스 엔지니어링
    • 소스코드 없이 프로그램을 분석할 수 있다.

효율적인 프로그래밍의 중요성

  • 100k의 어셈블리어 라인을 가지고 있음
  • 각 라인 실행에 CPU 1tick인 명령을 2GHz CPU에서 실행하면 50microsec 소요
  • 4MHz CPU에서는 25millisec 소요
  • 오늘 본 장치 중 하나는 4MHz 프로세서와 10KB RAM 및 48KB ROM
    • 코드 최적화를 해야함

시스템 계층에 작업

  • 시스템 프로그래밍 과정에서 설계된 대부분의 작업은 실제 응용 시스템의 "기본 계층"이 됨
    • 시스템 계층의 대기 시간 및 메모리 오버헤드가 중요

2024.03.03 - [Computer Science/시스템 프로그래밍] - SIC 컴퓨터 아키텍처와 시스템 소프트웨어 설계 기초

 

SIC 컴퓨터 아키텍처와 시스템 소프트웨어 설계 기초

System SW and Its Machine Dependency 시스템 SW 및 해당 종속성 시스템 소프트웨어의 설계는 실행되는 기계(= 컴퓨터)의 아키텍처에 크게 영향을 받음 예를 들어, 어셈블러는 니모닉 명령어를 기계어 코드

perfect-occasion.co.kr

 

반응형