CS/System Programming

1. Introduction to System Programming

공부중인학생 2024. 1. 26. 00:49

- 이 포스터는 KOCW에서 제공되는 남해운 교수님의 시스템 프로그래밍의 기초를 바탕으로 작성되었습니다.

 

 

 

컴퓨터 시스템 3가지로 구성되어 있습니다. 컴퓨터 하드웨어를 기반으로 OS가 그 위에서 동작하며 마지막 위에는 우리가 사용하기 원하는 응용 프로그램들을 실행하게 됩니다. 임베디드 시스템의 경우 임베디드 하드웨어와 임베디드를 위한 OS를 사용하는 것을 제외하고는 비슷한 양상을 보입니다.

 

 

 

컴퓨터 시스템의 내부 구조를 더 자세히 알아보겠습니다. 하드웨어 부분에는 CPU와 I/O 디바이스, 보조기억장치, 주기억장치가 존재합니다. 이 하드웨어 위에 OS가 존재하는데 이때 하드웨어와 가장 처음에 맡닫는 부분을 Archtecture dependent kernel이라고 부릅니다.

 

32bit인지 64bit인지, CPU가 더블코어, 멀티코어인지 등을 architecture라고 부릅니다. architecture dependent kernel은 하드웨어가 변경되어 architecture 부분이 바뀌면 이에 따라 dependent 하게 맞춰야 합니다. 다른 출력 디바이스를 사용하거나 SSD를 달았다던지 여러 하드웨어 구성이 바뀌었을 때 각각에 디바이스에 대해 OS가 인식을 하고 디바이스 드라이버를 통해 사용할 수 있게 해 주기 위한 부분이라고 생각하시면 됩니다.

 

그 바로 위에 커널은 OS 내부의 중요 기능들인 File system, IPC, I/O device management, Process management를 담당하는 부분입니다. File system의 경우 OS마다 구현 방식이 다르기 때문에 OS에 종속적 입니다. IPC는 프로세스들 간의 통신을 담당하며, Process management는 프로세스의 생성/해제에 따른 메모리 관리를 진행합니다.

 

System call interface는 API로 OS내부 기능들을 함수화 시킨 것으로 프로그램을 짤 때 컴퓨터 하드웨어나 OS 내부에 연동울 같이해야하는 것들이 많습니다. OS를 사용하여 하드웨어를 건드리기 위해서는 system call interface를 사용하게 됩니다. (파일을 여는 동작 등), 이런 기능들은 Libraries에 구현되어 있습니다.

 

 

 

이전까지는 clock speed를 올리는 방식으로 발전해왔지만 현재는 더 이상 올리기 힘들어졌습니다. 이런 상황에서 처리량을 높이고자 multi core processor가 도입됩니다. 이 multi core 각각의 core를 잘 활용하려면 OS로 그에 맞게 구성이 되어야 합니다. 또한 OS 위에 있는 응용 프로그램도 프로세서의 코어를 잘 사용하는 형태로 프로그램이 되어야 합니다.

 

 

 

유저가 C나 C++로 프로그래밍을 하여 소스 코드를 만든 뒤 실행되기까지의 과정을 살펴보겠습니다. 우선 에디터를 통해 코딩을 진행하고 디스크에 저장을 합니다. 그 다음 이 c파일을 컴파일한 경우 처음에 preprocessor가 코드에서 function들을 골라내고 directive(#include) 영역 또한 골라내게 됩니다.

 

이후 컴파일을 통해 코드안에 변수를 골라 메모리 영역에 배치하며 코드자체를 어셈블리화 시킵니다. 이 어셈블리어를 어셈블러를 통해 바이너리 코드로 이루어진 오브젝트 파일을 만듭니다. 마지막으로 링커가 오브젝트 파일을 합성해서 붙입니다.