본문 바로가기

programming/Unix12

[Unix Programming] 12. Locking record lockinglocking : 특정 record에 대한 다른 프로세스의 읽기/쓰기 제한read lock : 읽기는 허용, 쓰기는 제한write lock : 읽기와 쓰기 모두 제한unlocking : 제한 해제int fcntl(int fildes, int cmd, struct lock *ldata);fildes :read-lock : O_RDONLY/O_RDWR로 open된 파일에 한해서 적용 가능write-lock : O_WRONLY/O_RDWR로 open된 파일에 한해서 적용 가능cmd :F_GETLK : lock 정보 얻기F_SETLK : non-blocking locking or unlockingF_SETLKW : blocking lockingstruct flock *ldatashort.. 2025. 1. 16.
[Unix Programming] 11. 세마포어 세마포어세마포어란?→ 멀티프로세싱 환경에서 공유자원의 접근을 제한하기 위한 대표적인 방법p(sem) or wait(sem)// critical sectionv(sem) or signal(sem)p(sem) or wait(sem)// 세마포어의 wait 연산은 지나가느냐 or block 둘 중 하나임if(sem > 0) decrement sem by oneelse wait : sem이 non-zero가 될 때까지 (blocking) wait이 풀림 : then decrementv(sem) or signal(sem)increment sem by oneif(queue of waiting process not empty) restart first process in wait queueOS의 세마포어와 유닉스의 .. 2025. 1. 16.
[Unix Programming] 10. 파이프 pipe한 프로세스에서 다른 프로세스로의 단방향 통신 채널파일이 아니지만, write와 read로 data 통신 가능pipe 만들기#include int pipe(int filedes[2]);filedes[0] : 읽기용filedes[1] : 쓰기용성공 시 0, 실패 시 -1 returnprocess 당 open file 수, 시스템 내의 file 수 제한pipe 특성FIFO 처리lseek은 작동하지 않음. (읽은 데이터는 사라지기 때문에)pipe는 fork()에 의해 상속 가능. 파일포인터를 공유하는 것처럼pipe를 이용한 단방향 통신(부모 -> 자식)pipe 생성fork()에 의해 자식 생성 및 pipe 복사부모는 읽기용, 자식은 쓰기용 pipe를 close int main(int argc, cha.. 2025. 1. 16.
[Unix Programming] 9. 메모리 매핑 memory mapping*** memory mapping : file을 프로세스의 메모리에 매핑 ***void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);// fildes가 가리키는 파일에서 off로 지정한 위치부터 len만큼의 데이터를 읽어 addr이 가리키는 메모리 공간에 매핑한다.addr : 매핑할 메모리 주소→ 단, 잘못된 위치 선정 가능하기 때문에, 그냥 NULL로 적을 것.len : 메모리 공간의 크기→ 정확히는 페이지 단위prot : 보호모드PROT_READ : 읽기 허용PROT_WRITE : 쓰기 허용flags : 매핑된 데이터의 처리 방법을 지정하는 상수MAP_SHARED : 변경 내용 공유MAP_.. 2024. 12. 12.
[Unix Programming] 8. 시그널 Signal이란?software interrupt로 이해하면 된다.본래 목적은 실행 프로세스를 중단시키는 것이 목표이며, 자료 전송보다는 비정상적인 상황을 알릴 때 사용한다.(예) 프로그램 수행 중 “CTRL+C”를 누르면, 커널이 문자를 감지한 후 해당 세션에 있는 모든 프로세스에게 SIGINT라는 시그널을 보낸다. 모든 프로세스는 시그널을 받으면 종료한다. 단, shell process는 이를 무시한다.시그널 종류 (자주 등장하는 것 위주로 정리)2SIGINTinterrupt key(CTRL+C) 입력했을 때9SIGKILL프로세스를 kill하기 위한 시그널 (catch or ingnore 될 수 없는 시그널)10SIGUSR1user defined signal112SIGUSR2user defined s.. 2024. 12. 12.
[Unix Programming] 7. 프로세스 생성과 실행 프로세스의 생성fork 시스템 호출pid_t fork(void);return : 성공시 pid, 0 / -1 (실패원인 : 시스템 전체의 프로세스 수 제한, 한 프로세스 생성할 수 있는 프로세스 수 제한)→ 수행되던 프로세스(parent)의 복사본 process(child) 생성→ fork() 바로 다음 문장부터 동시에 실행두 프로세스의 차이점pid와 ppid가 다르다fork()의 반환값이 다르다parent procee : child process의 pidchild process : 0fork : 파일과 자료모든 변수 값이 그대로 복제 된다fork()후에 변경된 값은 복제되지 않는다file descriptor도 복제된다.parent process가 open한 file은 child process에게도 op.. 2024. 12. 11.