본문 바로가기

전체 글89

가변인자 함수 + 디버깅 매크로 가변인자란?가변인자란 인자의 개수가 변하는 인자디버깅 사용방법가변 인자와  내장 디버깅 매크로를 지원하지 않을 때1. gcc  컴파일러 환경에서 디버깅용 매크로 선언printf 함수처럼  매크로도 가변 개수의 인수를 취하도록 만들 수 있다. 이를 가변 매크로(variable macro)라고 한다. gcc에서 확장으로 제공하는 문법이므로 당연히 다른 컴파일러에서는 쓸 수 없습니다.C99의 표준 문법은 #define TRACE(fmt, args...) printf("(%s[%d] : " fmt, __FUNCTION__, __LINE___, ##args); 2. gcc 이외 컴파일러 환경에서 디버깅용 매크로 선언#define TRACE(fmt, ...) printf(fmt, ##__VA_ARGS__) 가변 인.. 2024. 8. 16.
파일을 이용한 동기화 Race condition을 해결하기 위한 방법 : Lock mechanism FLOCK : 동기화(Lock을 획득/해제 설정)int flock(int fd, int ,operation) parameter- fd : Lock 획득/해제하려는 파일 디스크립터- operation LOCK_SH : shared lock 걸기LOCK_EX : exclusive lock 걸기LOCK_UN : lock 풀기LOCK_NB : non-block 다른 값과 ORing하여 사용반환값- 성공 시 0 , 싷패 시 -1 Shared lock(공유 락) :  한 프로세스 또는 쓰레드 작업 완료하기 전에도 다른 프로세스 또는 쓰레드에서 접근 가능-> lock 자체를 공유 가능 Exclusive lock(배타적 락) :  한 프로세.. 2024. 8. 13.
저수준 OpenAPI ※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.  시스템 콜 :운영체제에서 커널 모드와 유저 모드로 나뉜다. 운영 체제 구성 중  커널은 운영체제의 핵심으로 프로세스, 하드웨어, 등등 컴퓨터 자원을 효율적으로 관리하는 역할을 가진다.  시스템 콜은 어플리케이션 유저 영역에서 커널 영역의 기능을 사용하고자 할 때 system call을 통해 필요한 기능 수행을 도와주는 인터페이스이다.  시스템 콜을 통해 유저 영역에서 커널의 기능을 사용할 수 있도록 도와준다  OpenAPI은  로우 레벨 system call을 실행하는 함수 목록들을 지칭한다.여기서는  open, close, read, write.. 2024. 8. 13.
동기화[2] - 뮤텍스 / 세마포어 / 스핀락 ※ 해당 글은 개인 공부 기록을 남겨놓는 것이 목적임으로 오류가 발생할수 있습니다.    오류 또는 업데이트된 사항이 있다면 댓글로 알려주시면 감사하겠습니다.  지난 동기화[1] 포스팅에서 동기화의 개념과 발생 가능한 문제점에 대해 포스팅 하였습니다. 이번 포스팅에서는 동기화로 발생가능한 문제점을 해결하기 위해 대표적인 메커니즘인뮤텍스 , 세마포어 , 스핀락에 대해 정리한다. 뮤텍스(Mutex, Mutualv exclusion , 상호 배제) Lock 메커니즘이며, 한 쓰레드만 Lock을 획득하고 임계 영역에 들어갈수 있도록 보장한다. 이 스레드는 임계 섹션에서 종료될 때만 Lock을 해제합니다. 프로그램이 시작되면 시스템에 특정 리소스에 대한 뮤텍스 개체를 생성하도록 요청합니다. 시스템은 고유한 이름이.. 2024. 8. 13.