반응형 시스템 프로그래밍13 [C언어] 프로세스 timer와 alarm개념과 관련 시스템 콜 프로세스 타이머와 알람 시스템Sleeping과 Timer 개념Sleeping: 프로세스나 스레드가 실행을 대기하는 상태Timer: 프로세스가 자기 자신에게 알림을 스케줄하는 메커니즘Alarmsunsigned int alarm(unsigned int seconds)호출하는 프로세스가 지정된 seconds 이후에 SIGALRM 시그널을 받도록 설정한다.동작 방식기존 알람이 설정되어 있다면 새로운 알람으로 대체된다.기존 알람의 남은 시간이 반환된다.seconds가 0이면 기존 알람을 취소한다.시한 폭탄 예제int left;char *msg1 = "Beep\n";char *msg2 = "Boom!\n";void bomb(int sig) { left--; if(left) { write(1,.. 2025. 3. 2. [C언어] 프로세스 Sleep개념과 관련 시스템 콜(System call) 프로세스와 Sleep 개념프로세스가 시간이 걸리는 특정 연산(IO, Network)을 수행해야 할 때, 프로세스는 할 일이 없으므로 무한정 대기 상태에 빠진다. 이를 방지하기 위해 운영체제는 I/O 요청을 보낸 후 해당 프로세스를 sleep 상태로 전환하고, 다른 프로세스가 CPU를 사용할 수 있도록 한다. 이후 커널이 해당 프로세스를 다시 깨우면 실행이 재개된다. 이는 운영체제의 스케줄링 기법 중 하나이다.Low Resolution Sleeping (저해상도, 초단위 sleep)sleep() 함수unsigned int sleep(unsigned int seconds);동작 방식seconds 만큼 프로세스를 sleep 시킨다.성공하면 0을 반환한다.신호(Signal) 등의 이유로 sleep이 조기에 종료.. 2025. 3. 2. [C언어] 리눅스 Time과 Clock의 종류와 POSIX Clocks 리눅스 Time의 종류Wall time (real time)실제, 절대적인 시간Monotonic time선형적으로 일정하게 계속 증가하는 시간 (시스템 부팅 이후 시간)Process time프로세스가 사용자 코드에서 작업을 수행하거나, 커널이 그 프로세스를 대신해서 작업하는데 걸린 시간Wall time보다 적으며, 멀티태스킹 중 사용되지 않은 시간은 제외됨Hardware Clocks소프트웨어 클록보다 더 정확하고 빠른 하드웨어 클록Real Time Clock (RTC)배터리 기반 클록High Precision Event Timer (HPET)추가적인 인터럽트가 가능하여 시그널 등을 이용할 수 있음Time Stamp Counter (TSC)64비트 레지스터 (x86 프로세서)CPU 코어의 사이클 횟수를 측.. 2025. 3. 2. [C언어] 메모리 매핑 입출력(Memory Mapped I/O) 관련 시스템 콜(System call) Memory Mapped I/O (mmap)Memory Mapped I/O는 파일 디스크립터(fd)를 직접 사용하는 대신, 파일을 메모리에 매핑하여 접근하는 방식이다. 이를 통해 시스템 콜을 최소화하고, 데이터를 빠르게 읽고 쓸 수 있다.mmap() - 파일을 메모리에 매핑void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);매개변수 설명addr : 매핑할 메모리 주소를 커널에게 '제안' (보통 0 입력하여 자동 지정)len : 매핑할 크기 (바이트 단위)prot : 메모리 보호 설정 (비트 OR 연산 사용 가능)PROT_READ : 읽기 가능PROT_WRITE : 쓰기 가능PROT_EXEC : 실행 가능flags : .. 2025. 3. 2. [C언어] 다중화된 입출력(Multiplexed IO) 관련 시스템 콜(System call) Multiplexed I/OMultiplexed I/O는 하나의 프로세스가 여러 개의 I/O 작업(파일, 소켓, 디바이스 등)을 동시에 처리할 수 있도록 하는 기술이다. 이를 통해 비동기적으로 여러 데이터 소스를 효율적으로 관리할 수 있다.단일 프로세스는 1개 이상의 파일 디스크립터(fd)를 동시에 블로킹할 수 없다. 따라서 read() 함수가 호출될 경우, 해당 파일에 데이터가 없으면 다음과 같은 동작을 수행한다.일반 파일: read()는 0을 반환하며, 이는 EOF(End of File) 상태를 의미한다.파이프, 소켓, FIFO: 기본적으로 블로킹 동작을 수행하며, 데이터가 준비될 때까지 대기하므로 다른 fd에 대한 처리가 불가능하다.이러한 한계를 극복하기 위해 I/O Multiplexing이 사용된.. 2025. 3. 2. [C언어] File I/O (Unix vs Standard IO)관련 시스템 콜(System call) 파일 시스템과 I/O 개념File Table (OS)운영체제는 각 프로세스의 열려있는 파일들을 관리하기 위한 파일 테이블을 유지한다. 파일의 인덱스는 실제 파일명이 아니라 File Descriptor (fd)로 관리된다.각 파일 테이블의 엔트리는 다음과 같이 구성된다.inodefile offset (파일 위치)Access modes 이 포스트에서는 Unix IO의 파일 입출력 관련 System calls를 소개한 후, standard IO 라이브러리와 함수들을 소개 후, Unix와 standard IO를 비교하면서 장단점을 정리합니다.File Descriptor (fds)File Descriptor(fds)는 0부터 시작하는 정수 값이며, 실행 중인 프로세스가 파일을 열 때 부여된다. 하나의 프로세스 내.. 2025. 3. 2. [C언어] 리눅스 파일 시스템과 file table의 구조(inode, offset등) 리눅스 파일 시스템리눅스에서 파일은 단순한 데이터의 집합이 아니라, 운영체제가 효율적으로 관리할 수 있도록 설계된 데이터 구조이다.파일은 바이트의 연속적인 시퀀스이며, 다양한 입출력(I/O) 방식과 파일 관리 구조를 통해 운영된다.1. 리눅스의 파일 I/O 방식리눅스에서는 다양한 방식으로 파일을 처리할 수 있으며, 대표적인 방법은 다음과 같다.다중화된 I/O (Multiplexed I/O)여러 개의 파일을 동시에 처리할 때, 운영체제는 다중화된 I/O 기법을 사용하여 성능을 최적화한다. select(), poll(), epoll() 등의 시스템 콜을 활용하면 여러 파일을 동시에 감시하고, 준비된 파일에 대해 데이터를 읽거나 쓸 수 있다.메모리 매핑 I/O (Memory Mapped I/O)파일을 물리적인.. 2025. 3. 2. 이전 1 2 다음