0.1 앞으로 배울 것들.

김영우 (AvocadoSmasher)·2022년 10월 5일

System Programming

목록 보기
2/6

프로그램은 크게 응용 프로그램과 시스템 프로그램 이렇게 2가지로 나뉜다. 그렇다면 이 두 프로그램 사이에는 어떤 차이가 있을까?

다음과 같은 C언어로 짜여진 프로그램이 있다고 해보자. 그렇다면 실제로 해당 프로그램은 어떻게 동작할까?

#include <stdio.h>

int main()
{
  printf("Hello, World\n");
}

이런 질문을 받으면 C를 배워본 사람이라면 문자열 Hello Wolrd가 출력될 것이다. 라고 대답할 수 있을 것이다. 하지만 이는 응용 프로그램의 관점에서 본 대답이고 시스템 프로그래밍을 배우게 된다면 다음과 같은 더 세세한 질문들에 대한 답을 할 수 있게 될것이다.

  1. 이 프로그램이 어떻게 CPU에서 동작할까?

    cpu는 0과 1 만 이해할 수 있는 장치인데 실제 프로그램은 ASCII 코드로 적혀있는데 cpu는 이를 어떻게 이해해서 수행하는 걸까?

  2. printf()의 기능이 뭘까?

    printf는 라이브러리이다. 해당 라이브러리가 어떻게 내가 작성한 프로그램과 연결되어 작동하는걸까?

  3. 문자열이 어떻게 모니터에 나타나는 걸까?

    device driver를 통해서 모니터에 나타나게 되는데 이는 어떤걸까?

  4. 이 프로그램이 어떻게 다른 프로그램들과 동시에 동작할 수 있는 걸까?

    크롬, 동영상 플레이어, 컴퓨터 카카오톡 등과 같은 다수의 프로그램이 어떻게 동시에 동작할까?

  5. 지역 변수와 전역 변수들 사이에 어떠한 차이가 있는걸까?

  6. 만약 Hello, World를 두 줄로 나눠서 출력하면 어떻게 될까?

    같은 프로그램이라도 어떻게 프로그래밍 하냐에 따라 효율이 달라지는지에 대해 배우고 나면 답변할 수 있을 것이다.

실질적으로 시스템 프로그래밍에 대해 배우면 하드웨어와 소프트웨어가 어떻게 유기적으로 동작하는지 배울 수 있고 Process, Scheduling, Memory management, Optimization 등과 같은 많은 프로그래머들이 잘 추상화 해놓은 내용들에 대해서 배울 수 있다.

profile
Android Studio 공부 중

0개의 댓글