시스템 콜(system call)과 라이브러리 함수(library function)

2024. 9. 9. 13:06Linux*security

반응형



 시스템 콜 (System Call)


- 시스템 콜은 운영체제의 커널 기능을 프로그램이 사용할 수 있도록 커널과 사용자 프로그램 간의 인터페이스 역할을 한다. 
- 사용자 모드에서 실행되는 프로그램은 하드웨어 자원(파일 시스템, 네트워크, 메모리 등)을 직접적으로 접근할 수 없기 때문에, 시스템 콜을 통해 커널에 요청해야 한다.
- time() 시스템 콜은 커널에서 현재 시간을 가져오는 함수이며 커널에서 현재 시간을 직접 읽어 사용자에게 전달한다.

 

 

- time() 시스템 콜은 현재 시간을 초 단위로 반환하는 함수이다.

include <stdio.h>
include <time.h>

int main() {
    time_t current_time;

    // time() 시스템 콜을 사용하여 현재 시간을 가져옴
    current_time = time(NULL);

    printf("현재 시간(초 단위): %ld\n", current_time);
    return 0;
}

 

 

 

 

 

 

 


라이브러리 함수 (Library Function)

 

- 라이브러리 함수는 일반적으로 커널에서 제공하는 시스템 콜을 사용하여 더 고수준의 기능을 제공하는 함수이다.
- 라이브러리 함수는 커널과 상호작용할 수 있지만, 직접적인 커널 자원 관리를 하지 않고 시스템 콜의 결과를 가공하거나 추가 기능을 제공한다.
- ctime() 라이브러리 함수는 time() 시스템 콜을 통해 얻은 시간 값을 문자열 형태로 변환하여 사람이 읽을 수 있는 시간 형식으로 반환한다.



ctime() 라이브러리 함수는 time()으로 받은 시간을 사람이 읽기 쉽게 변환하는 라이브러리 함수이다.

include <stdio.h>
include <time.h>

int main() {
    time_t current_time;
    char time_string;

    // time() 시스템 콜을 사용하여 현재 시간을 가져옴
    current_time = time(NULL);

    // ctime() 라이브러리 함수를 사용하여 시간 정보를 문자열로 변환
    time_string = ctime(&current_time);

    printf("현재 시간(문자열): %s", time_string);
    return 0;
}

 

 





▶ 시스템 콜과 라이브러리 함수의 차이점

 

- time(): 커널에서 시간 정보를 가져오는 시스템 콜이다. 이는 커널의 자원(현재 시간)을 직접적으로 읽어온다.
- ctime(): 시간 정보를 사람이 읽을 수 있는 형식으로 변환하는 라이브러리 함수이다. 커널의 자원을 직접 다루지 않고, 시스템 콜을 통해 받아온 정보를 가공하는 역할을 한다.

 


▶  메모리 할당에 대한 차이
- 시스템 콜을 통해 커널의 자원을 사용할 때는 커널이 제공하는 정보를 사용자 영역으로 복사해야 하므로 별도의 메모리 할당이 필요할 수 있다.
- 그러나, ctime() 같은 라이브러리 함수는 커널의 정보를 직접적으로 다루지 않고, 사용자 영역 내에서 데이터를 가공하는 데 필요한 메모리를 자동으로 처리해주기 때문에 사용자는 별도의 메모리 할당을 신경 쓰지 않아도 된다.


 
 
 

 

 

반응형