꾸준하게 기록하기
article thumbnail

시스템 프로그래밍의 기반 요소

1) 시스템 콜 (system call) -> C 언어 함수

2) C 라이브러리

3) C 컴파일러

 

사용자 영역에서의 시스템 프로그래밍

 

시스템 콜

시스템 콜 : 운영체제나 리소스나 서비스 요청을 위해 사용자 영역에서 커널 영여그올 들어가는 함수

주요 시스템 콜 : read(), write(), open() 등

 

시스템 콜은 어떻게 구현?

1. eax 레지스터에 시스템 콜 번호 넣고 

2. ebx 레지스테에는 시스템 콜에 해당하는 인자값을 넣고

3. 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넣어줌

instruction code (CPU 가 제공하는 코드)

시스템 콜도 함수 이기때문에 함수의 인자를 넣어주게 된다.

 

 3-1) CPU는 사용자 모드를 커널모드로 바꿔줌

 3-2) IDT(Interrupt Descriptor Table)에서 0x80에 해당하는 주소(함수)를 찾아서 실행함

 3-3) system_call() 함수에서 eax 로부터 시스쳄 콜 번호를 찾아서 해당 번호에 맞는 함수로 이동

 3-4) 해당 함수 실행 후, 다시 커널 모드에서 사용자 모드로 변경하고 다음 코드 진행  

ex) open 함수라면 eax 에 5번이 들어가게 되고 sys_open 함수 호출하고

ebx에 있는 인자를 sys_open 함수에 넘겨줘서 실행하게 된다. (커널모드로 실행하게 된다)

실행 한 후, 사용자 모드 변경하고 다음 코드 실행!

 

API

응용 프로그램과 분리된 하위 호환 인터페이스 

 

 API 또다른 측면에서 보면 동적 라이브러리, 정적 라이브러리가 있는데

2가지로 나누는 기준은,

동적 라이브러리는 다시 컴파일 하는 것이 아니라 바이너리에다가 실행파일 컴파일한 코드를 붙여서 실행파일로 만들고

정적 라이브러리는 실행파일을 만들 아예 바이너리를 실행파일 안에 붙인다.

 

라이브러리는 미리 컴파일이 상태. 메인 함수에서 호출만 하면 된다.

라이브러리가 바뀌면 동작이 다르게 된다.

 

라이브러리는 응용프로그램과 분리되어 있다. ( api가 실행파일과 분리된 경우가 있다. )

라이브러리를 만들어 놓으면 실행파일을 만들 호출만 하면 되고

해당 라이브러리는 업데이트 시킬 라이브러리만 update 하면 된다.

( api쪽 라이브러리만 업데이트 시키면 실행파일도 같이 기능이 업데이트 될 수도 있다. )

 

 

 

제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
728x90
profile

꾸준하게 기록하기

@:_:

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!