[시스템 프로그래밍이란] 시스템 프로그래밍이란 커널 및 핵심 시스템 라이브러리를 직접 사용하면서 하위 래밸에서 동작하는 시스템 소프트웨어를 작성하는 기술을 말합니다.
개발자는 프로그램이 잘 작동하기를 바랍니다. 운영체제의 버전에 상관없이 의도한 대로 동작해야 합니다. 이를 호환성이라고 말합니다. 시스템 레벨에서 호환성에 영향을 주는 2가지가 있습니다. 바로 API(application programming interface)와 AB
리눅스 시스템의 표준 이야기
리눅스의 기본적이고 핵심적인 추상화 개념은 파일입니다.
파일시스템은 파일과 디렉터리를 정형적이고 유효한 계층 구조 안에 모아놓은 것이다. 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 가리키는 말입니다. 파일 시스템은 통상 하드 디스크나 CD-ROM 같은 실제 자료 보관 장치를 사용하
프로세스는 실행 중인 오브젝트 코드를 말합니다. 그리고 프로세스는 종료 전까지 항상 활성화 상태로 실행 중인 프로그램을 의미합니다.
리눅스에서 권한은 사용자와 그룹의 형태로 제공됩니다. uid(user id)는 고유한 양수 값이며 사용자를 구분합니다.
시그널은 비동기식 단방향 알림 메커니즘입니다. 커널에서 프로세스로, 프로세스에서 다른 프로세스로, 아니면 프로세스 자기 자신에게 시그널을 보낼 수 있습니다.
유닉스 시스템에서는 거의 모든 것을 파일로 표현하므로 파일 입출력은 정말 중요한 부분입니다. 파일은 읽거나 쓰기 전에 반드시 열어야 합니다. 커널은 파일 테이블이라고 하는 프로세스 별로 열린 파일 목록을 관리합니다. 이 테이블은 음이 아닌 정수 값인, 파일 디스크립터로
가장 대표적인 읽기 메커니즘은 POSIX.1에 정의된 read() 시스템 콜을 사용하는 것입니다. read 시스템 콜을 호출할 때마다 fd가 참조하는 파일의 현재 파일 오프셋에서 len 바이트만큼 buf로 읽어 들입니다. 성공하면 buf에 쓴 바이트 만큼 숫자를 반환
파일에 데이터를 기록하기 위해 사용하는 가장 기본적이며 일반적인 시스템 콜은 write()입니다.
커널 버퍼에 담긴 데이터를 디스크에 동기화 하는 것은 매우 중요한 주제이긴 하지만, 쓰기 작업이 지연되는 문제를 너무 확대 해석해서는 안된다.
파일에서 데이터를 읽으려면 파일을 열 필요가 있다. 리눅스 시스템콜인 open()함수를 사용할 수도 있지만, 이번에는 파일 포인터를 사용하기 위해 fopen()함수를 사용한다.
표준 입출력 라이브러리는 사용자 버퍼를 커널 버퍼로 옮길 수 있도록 인터페이스를 제공한다. 스트림에 쓰여진 모든 데이터가 write() 시스템 콜을 통해 실제로 커널 버퍼로 옮겨갈 수 있도록 하는 것이다. 앞서 설명한 것처럼 write()를 통해 커널 버퍼로 옮겨진 데
표준 입출력 기반의 버퍼 C언어의 표준 입출력 라이브러리의 함수를 통해 데이터를 입출력하면 해당 데이터들은 운영체제가 제공하는 메모리 버퍼를 통과하게 된다. 메모리 버퍼는 데이터를 임시로 보관하는 메모리 공간이다. 키보드를 통해 입력되는 데이터는 일단 입력버퍼에 저장
벡터 입출력은 한번의 시스템 콜을 사용해서 여러 개의 버퍼 벡터에 쓰거나 여러 개의 버퍼 벡터로 읽어 들일 때 사용하는 입출력 메서드다. 벡터 입출력은 선형 입출력 메서드에 비해 다음과 같은 장점을 가지고 있다.
바이너리는 디스크 같은 저장 장치에 기록되어 있는 컴파일된 실행할 수 있는 코드를 말한다.