본문 바로가기

프로그래밍(TA, AA)/C C++

(24)
[시스템프로그래밍] 시그널 시그널은 소프트웨어 인터럽트(software interrupt)로, 프로세스에 뭔가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것입니다. 시그널은 0으로 나누기처럼 프로그램에서 예외적인 상황이 일어나는 경우나, 프로세스가 시그널을 보낼 수 있는 함수를 사용해 다른 프로세스에 시그널을 보내는 경우에 발생합니다. 보통 시그널로 전달되는 메시지는 무엇이 발생했는지를 표시하는 미리 정의된 상수를 사용합니다. 시그널을 받은 프로세스는 시그널에 따른 기본 동작을 수행하거나, 시그널을 무시하거나, 시그널 처리를 위해 특별히 지정된 함수를 수행하도록 할 수 있습니다. 프로그램에서 시그널을 보내려면 아래 함수들을 사용하며, 이중 kill 함수를 가장 많이 사용합니다. 기능 함수원형 시그널 보내기 int kil..
[시스템프로그래밍] 프로세스 생성과 실행 유닉스에서 프로세스는 사용자가 명령행에서 직접 프로그램을 실행해 생성하는 경우도 있지만, 프로그램 안에서 다른 프로그램을 실행해 생성하는 경우도 있습니다. 이렇게 프로그램에서 다른 프로그램을 실행해 새로운 프로세스를 생성할 때는 system, fork, vfork 함수를 사용합니다. 기능 함수원형 프로그램 실행 int system(const char *string); 프로세스 생성 pid_t fork(void); pid_t vfork(void); 유닉스 프로세스가 종료되면 해당 프로세스가 어떻게 종료되었는지를 나타내는 종료 상태를 저장합니다. 자식 프로세스는 부모 프로세스에 자신이 어떻게 종료되었는지를 알리는 종료 상태값을 리턴할 수 있습니다. 일반적으로 종료 상태값이 0이면 정상적으로 종료했음을 의미합..
[시스템프로그래밍] 프로세스 정보 이번 절의 목표는 유닉스 시스템에서 프로세스가 무엇인지 이해하고, 함수를 사용해 프로세스의 속성을 검색하며, 프로세스 실행 시간 측정 및 환경 변수를 설정하고 사용할 수 있게 되는 것입니다. 개요프로세스는 현재 실행 중인 프로그램을 의미합니다. 유닉스 시스템에서는 동시에 여러 프로세스가 실행됩니다. 프로세스는 계속 실행상태에 있지는 않으며, 실행에서 수면, 실행 대기 등 규칙에 따라 여러 상태로 변합니다. 현재 유닉스 시스템에서 실행 중인 프로세스를 확인하려면 ps, prstat, sdtprocess 명령을 사용합니다. 시스템에서는 프로세스를 식별하는 데 프로세스 ID(PID, Process ID)를 사용합니다. 관련 프로세스들이 모여 프로세스 그룹(Process group)을 구성합니다. 세션(sess..
[시스템프로그래밍] 시스템 정보 유닉스 시스템과 관련된 기본 정보와 사용자 정보 검색, 시스템의 시간을 관리하는 함수를 다룹니다. 유닉스 시스템의 기본 환경 정보를 검색할 수 있는 함수들은 기본 환경과 관련된 구조체나 상수를 사용해 정보를 검색합니다. 주요 대상 정보는 하드웨어와 운영체제의 종류 관련 정보와 메모리 페이지의 크기나 최대 패스워드 길이 등 시스템 환경 설정에 관한 정보입니다. 아래 표에서 시스템 정보 검색 관련 함수를 소개합니다. 이중 sysinfo 함수를 사용하면 정보 검색 뿐만 아니라 호스트명 같은 일부 환경 정보를 설정할 수도 있습니다. sysconf 함수를 사용하면 시스템 자원 관련 정보를 검색할 수 있고, pathconf와 fpathconf 함수를 사용하면 파일과 디렉토리 관련 자원 정보를 검색할 수 있습니다. ..
[시스템프로그래밍] Segmentation Fault Segmentation Fault는 컴퓨터 소프트웨어의 실행 중에 일어날 수 있는 특수한 오류입니다. 세그멘테이션 위반, 세그멘테이션 실패 라고도 하며, 세그폴트(Segfault)로 줄여서 쓰기도 합니다. Segmentation Fault는 프로그램이 허용되지 않은 메모리 영역에 접근을 시도하거나, 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생합니다. (예를 들어, 읽기 전용 영역에 어떤 내용을 쓰려고 시도하거나, 운영 체제에서 사용하는 영역에 다른 내용을 덮어쓰려 하는 경우) 모토로라 68000 등의 프로세서 기반 시스템들은 이러한 오류를 주소나 버스 오류로 취급하는 경향이 있습니다. 세그멘테이션은 운영 체제에서 사용하는 메모리 관리 및 보호의 한 기법입니다. 이것은 페이징으로 대부분 ..