시스템 프로그래밍의 기반 요소
1) 시스템 콜 (system call) -> C 언어 함수
2) C 라이브러리
3) C 컴파일러
사용자 영역에서의 시스템 프로그래밍
시스템 콜
시스템 콜 : 운영체제나 리소스나 서비스 요청을 위해 사용자 영역에서 커널 영여그올 들어가는 함수
주요 시스템 콜 : read(), write(), open() 등
시스템 콜은 어떻게 구현?
1. eax 레지스터에 시스템 콜 번호 넣고
2. ebx 레지스테에는 시스템 콜에 해당하는 인자값을 넣고
3. 소프트웨어 인터럽트 명령을 호출하면서 0x80값을 넣어줌
→ 시스템 콜도 함수 이기때문에 함수의 인자를 넣어주게 된다.
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쪽 라이브러리만 업데이트 시키면 실행파일도 같이 기능이 업데이트 될 수도 있다. )
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.
'CS > 시스템 프로그래밍' 카테고리의 다른 글
프로세스 ID (0) | 2022.03.02 |
---|---|
ABI와 표준 (0) | 2022.03.02 |
리눅스 파일 시스템과 관련 쉘 명령어 (0) | 2022.02.25 |
foreground 및 background 프로세스 (0) | 2022.02.25 |
쉘 사용법 정리 - 리눅스 리다이렉션과 파이프 (0) | 2022.02.25 |