본문 바로가기
CS공부/시스템프로그래밍

[시프] 01-. 시스템프로그래밍 개요

by tlgusdl03 2023. 8. 31.

컴퓨터 시스템이란?

  - 하드웨어와 소프트웨어를 합하여 컴퓨터 시스템이라고 한다.

  - 컴퓨터 시스템은 고전적인 기계시스템인 자동차, 프레스 머신등등과 달리 정보를 다룬다 따라서 해석을 달리할 여지가있다. 이는 컴퓨터에서 정보가 비트와 context로 이루어졌기 때문인데 예를 들어 1010은 십진수에서 10으로 해석되지만 아스키코드에서는 '\n' 이라는 개행문자가 된다.

  - 컴퓨터 시스템에서 연산은 현실의 방법과 같아야 한다. 논리적으로 같아야 하지만 실제로 하드웨어적으로 구현해야 하기에 다를 수 밖에 없다.                                                                                                                                                              * 사람은 양의 수를 매우 많이 셀 수 있지만 16비트의 컴퓨터에서는 표현 가능한 수의 범위가 -32,768 ~ 32,767 까지이므로 그 오버플로우가 발생한다.                                                                                                                                                    * X^2 >= 0 와 같은 경우 float 자료형의 경우 맞는 말이지만 정수형의 경우 그렇지 않다.                                                        * (X + Y) + Z = X + (Y + Z) 같은 결합 법칙(associative property)의 경우도 컴퓨터 시스템상으로는 틀릴 수 있다.                (1e20 + -1e20) + 3.14 = 3.14이지만 1e20 + (-1e20 + 3.14) = 3.139999999... or 3.14000000... 이 될 수 있다. 왜냐하면 아주 큰 수를 표현할 때에는 끝 자리가 변할 수 있기 때문이다.                                                                                               

이번학기 중요 목표

  - 위 그림은 우리가 작성한 코드가 어떤 과정을 거쳐 실행 가능한 파일이되는지 나타내는 그림이다. 작성한 코드는 우선 전처리기를 통해서 약간의 수정이 된다. 그 이후 컴파일러가 코드를 어셈블리언어로 바꾼다. 여기까지는 아직 이해할 수 있는 언어이다. 이후로 어셈블러가 코드를 이진법으로 바꾸고 링커가 코드를 이리저리 만져서 실행파일을 만든다.                 이번학기에서는 컴파일러에 대해 집중한다. 

  - 파일을 만든다는 개념은 컴퓨터공학 초창기서 부터 있던 개념이었고 따라서 컴파일러는 굉장히 성숙하다. (내가 아이큐가 50이상 오른대도 컴파일러가 더욱 효율적일 것이다.) 그래도 컴파일러가 어떤 일을 하고 어떻게 작동하는지 아는 것이 그렇지 않을때보다 효율적으로 코딩을 함에 있어서 유리하다 그러니 우리는 컴파일러에 대해 배우고 컴파일러에 대해 배우기 위해 어셈블리어를 배운다.

- 어셈블리어는 성능을 조정(tune)하거나 보안 분야에서 많이 쓰인다.

  - 이 그림은 소프트웨어의 계층을 나타낸 것이다. 맨 아래에는 HW가 있고 그 위에 Firmware와 middleware가 있다. 이것들은 빠른 성능을 위해 C나 어셈블리어로 짜여있다. 따라서 우리는 또한 다룰 것이다.

C에서 중점적으로 다룰 것은 다음과 같다.

  • 메모리 공간 할당, 포인터
  • 구조체
  • 전처리기