LinuxProgramming
-
[Linux] 2023 fall unix programming 후기LinuxProgramming 2023. 12. 27. 23:09
이 수업을 듣기 전 교수님께서 날 말리셨다 수강신청 철회하라는 메일을 직접 보내셨다 운영체제 듣고 들으라고 왜 선수과목 안하고 먼저 들으려고 하냐고 3학년 강의인데 왜 2학년이 들으려고 하냐고 이거 fail 날게 뻔한데 들을 수 있는 다른 수업 냅두고 이거 들었다가 재수강하는 것은 학생한테 매우 큰 손실이라고 하심 근데 내가 정말 관심이 있는 분야라 교수님 말씀 잘 알겠다고 하고 걍 수강철회 안하고 들음...ㅋㅋ 초반은 괜찮음 하지만 중간에 shared memory/semaphore 가면서 갑자기 9학점짜리 강의가 되어버림 여기다 나는 운영체제를 아직 안들었으니까 ㅇㅇ 필요한 운영체제 공부까지 하니 12학점짜리 강의가 됨 근데 뭐 공부시간만 는거지 재미도 있고 스트레스가 오는 타입의 공부는 아니라 그냥 ..
-
[Linux] 기말 헷갈림 모음LinuxProgramming 2023. 12. 19. 11:34
[signal] WIFSIGNALED(status) : signal로 exited 되었으면 WTERMSIG(status) : terminate 시킨 signal 확인 SIG_IGN SIG_DFL fork exec 하면 signal table도 복사됨 alarm은 자식까지 전달 x alarm(0) -> alarm 취소 sighandler 한테는 동일한 종류의 signal은 1개만 전송됨 sighandler에서 signal 처리는 stack으로 누적됨 sigprocmask -> signal block 풀기 전까지 BLOCK만 하는거지 푼 후에는 적립된 signal들을 받는다! 적용대상은 인자에 없는데 무조건 이 코드가 쓰여진 프로세스 blocked signal set이기 때문 sigprocmask(SIG_S..
-
[Linux] flock() (record locking)LinuxProgramming 2023. 12. 15. 02:13
file locking이다. flock은 fcntl()로 한다. 특정 file의 특정 바이트만큼 lock을 걸어놓을 수 있다. fcntl로 record lock을 걸러면 fopen(file open) 자체를 lock type에 맞게 열어야한다. [readlock and writelock] 1. F_RDLCK allows multiple processes to read from the file simultaneously, but prevents any process from acquiring write lock on the same portion of the file. read lock can be held by one or more processes. other processes can also acqu..
-
[Linux] producer consumer in bounded arrayLinuxProgramming 2023. 12. 10. 14:21
유한버퍼에서의 producer consumer는 총 3개의 세마포어를 사용해야한다 1. semaphore s : controls buffer access 이 s는 0 아니면 1만 가질 수 있다. 읽고 쓰기를 오직 한 프로세스만 가능하게 하기 위해서이다. 이건 producer 와 consumer 가 각각 한 명이 아니더라도 당연히 적용된다. 그냥 한 프로세스가 semop로 0 만들어버리면 아무도 접근하지 못하기 때문이다. 2. semaphore e : number of items available for consumption (prevents underflow) consumer가 읽을 수 있는 데이터 개수이다. 최소 0 최대 버퍼 사이즈이다. 만약 값이 0이라면 버퍼에 데이터가 없다는 뜻이다. 따라서 이때..
-
[Linux] 과제4 : 카카오톡LinuxProgramming 2023. 12. 8. 23:28
3일동안 학정에 살았다...어이가 없는건 524 바이트 보내야하는데 520 바이트로 잘못적어서 마지막 3시간 날림 여기서 cmessage가 control message의 약자인데 얘가 semaphore처럼 동작하는 놈이다따라서 msgqueue에 딱 한 개만 돌아다녀야한다얘는 그래서 critical section 에 들어가기 전에 무조건 받아서 최신화 시켜주고 넣어준다음에 내 msg를 보내야한다. 그래서 cmessage를 다뤄야하는 부분은 딱 4 군데임. 1. 내가 톡방을 판 놈일때(해당 msgqueue를 연 첫 놈일때)이때는 cmessage 자체가 없으므로 내가 cmessage를 생성해서 msgqueue에 돌아다니게끔 만들어 넣어줘야함 2. 내가 카카오톡에 접속했을때cmessage의 snum을 받아서 내..
-
[Linux] shared memoryLinuxProgramming 2023. 12. 8. 09:37
공유 메모리는 사실 별로 주의해야할게 없다.왜냐하면 이 방법 자체가 그냥 메모리를 프로세스로 옮겨서 작업하겠다는 얘기여서그냥 공유메모리 생성하고(shmget) 프로세스에 붙인다음(shmat)동적할당처럼 포인터로 접근해서 쓰고 읽을 줄 만 알면 되기 때문이다. [shared memory introduction(system call에 대한 얘기)] system call 을 쓰는건 안좋음(syscall은 OS의 독자적인 프로그램에 의해서 실행됨) 왜냐하면 syscall을 사용하면 현재 진행중이던 작업을 중단하고 os 프로그램이 나와서 실행하는 과정을 거치기 때문.즉 syscall이 호출될때마다 context switching이 매번 일어나는거임 그래서 가능하면 context switching을 안하는게 좋으니..
-
[Linux] semaphoreLinuxProgramming 2023. 11. 25. 22:58
[semaphore] 세마포어는 멀티프로그래밍 환경에서 공유자원에 대한 접근 제어를 하는 방식으로 1개의 공유자원에 제한된 개수의 process 또는 thread만 접근할 수 있도록 만드는 교착상태에 대한 해결방법임. unix/linux 에서의 세마포어는 원자적으로 제어되는 정수변수(sem)으로, semaphore 값이 0이면 대기해야하고(wait), semaphore 값이 >0 이면 접근가능하다(key--) 0보다 클때 : 접근함과 동시에 sem 값 - 10 일때 : 접근할 수 있을때까지 wait종료하고 나갈때 : 나가면서 sem값 + 1 하여 다른 프로세스가 접근할 수 있도록 함 이 sem값을 제어함으로써 critical section을 구현할 수 있다. 만약 초기 key값이 10이고 특정 프로세스가..
-
[Linux] msgqueueLinuxProgramming 2023. 11. 23. 00:38
[FIFO vs Message Queue] fifo는 FIFO파일의 위치를 알아야하기 때문에 서로 아는 사람들끼리 하는 통신임.FIFO파일은 해당 FIFO파일을 생성한 디렉토리 안에 생성되기 때문. 그래서 시스템 전체에서 쓸 수 있는 통신파일을 만들기 위해 나온게 IPC 객체임이건 시스템 전체에서 관리함. 모든 사람들이 사용할 수 있는 공통 디렉토리에서 관리됨. FIFO/msgqueue 공통점msg를 보냈을때 msg를 받으면 msg가 사라진다. FIFO/msgqueue 차이점client와 server를 모두 종료하면fifo는 아직 남아있는 데이터가 있어도 모두 사라진다.안에 있던 데이터가 전부 밖으로 흘러나와 사라져버린다고 생각하면 된다.그래서 fifo크기가 항상 0이다. 근데 msgqueue는 clie..