1. 시스템 프로그래밍 개요
이 글은 다음의 강의를 정리 및 복습하는 글임을 밝힙니다.
http://kocw.or.kr/home/cview.do?mty=p&kemId=1223639&ar=relateCourse
임베디드 SW의 커리큘럼
Programming Language : C언어, C++ 을 공부해야한다고 합니다.
->
System Programming : 코드가 컴퓨터 시스템에서 어떻게 동작되는가를 배운다고 합니다.
->
Data Structures : 자료구조
->
Operating Systems : 운영체제
->
Microprocessor : (하드웨어) 마이크로 프로세서
->
Computer Architecture : (하드웨어) 컴퓨터 구조
->
Algorithms : 알고리즘
->
Embedded System : 임베디드 시스템
일반적인 컴퓨터의 System Programming
Aplications 응용 <-> Operating Systems <-> Computer hardware
임베디드 시스템의 System Programming
User Applications <-> Embedded Operating Systems <-> Embedded hardware
System Programming
이 그림은 System Programming의 과정을 보여준다. 강의에서는 생략된 부분이 많다고 하였다.
먼저 가장 밑의 Computer hardware 부분을 살펴보자. 이부분에서는 input, 연산, output의 과정이 이루어진다.
운영체제의 역할을 살펴보자.
Architecture dependent kernel : 운영체제의 핵심 부분 중 하나로 하드웨어에 대한 의존성으로 하드웨어에 대한 이해와 상호 작용을 담당한다. 각각의 하드웨어 아키키텍처(x86, ARM)에 맞게 컴파일된 커널을 사용해야한다. 이 커널은 하드웨어 리소르를 효율적으로 관리하고 하드웨어 장치와 상호 작용하는데 필요한 드라이버와 모듈을 제공한다.
kernel : OS의 핵심이 되는 컴퓨터 프로그램이다. 주요한 역할 4개가 정리되어 있으며 다음과 같다
- File System : 데이터를 디스크에 저장하고 관리하는 역할을 담당한다.
- Inter-process communication : 프로세스간의 통신을 담당한다.
- I/O and device management : 입출력 장치와 상호작용한다.
- Process management : 프로세스를 생성 관리한다.
System call interface : 응용 프로그램이 운영체제 서비스를 사용할 수 있게 하는 중요한 부분이다. 시스템 콜은 운영체제 기능에 대한 접근 방법을 정의한다. API와 유사한 역할을 한다.
Libraries : 일반적으로 공동작업을 수행하는 함수의 모음으로 시스템 콜을 호출하는 것을 단순화한다.
전체에서 다시 본다면 사용자가 접근할 수 있는 영역은 Applications의 User applications 와 Operating Systems의 libraries라고 할 수 있다. 그 외 하드웨얼르 제외한 System call interface 와 Kernel 그리고 Architecture depencdent kernel은 Kernel의 영역이다.