본문 바로가기
일상,취미

다시 시작하는 TIL 27일차

by 진득한진드기 2024. 7. 18.

오늘 한일


오늘 프로젝트와 프로그램 설명 발표를 무사히 마쳤다.


이번에 사수님께서 프리랜서 형태로 근무 형태를 바꾸므로서 기존에 내가 하려던 일이 바꼈다.

회사가 작아서 그런가 이랬다 저랬다 계속 바뀌는거 같다.

원래 맡을려했던 엔진, 윈도우 프로그래밍 부분을 내가 유지보수를 도와주는 느낌으로 가고

새로 들어온 신사업에 플랫폼 개발을 맡아야한다.

지금 새사업들어가는 팀원들끼리 의견이 좀 좁히지지 않는 느낌이 있다.

퇴사자가 많았고 데스크탑앱 플랫폼을 따로 따로 만들자니 시간이랑 기존에 있던 서비스는 유지해야되서 최대한 크로스플랫폼으로 개발해야되는데 뭐.... 신입이라 크게 배운건 없지만 갑자기 일렉트론이랑 타우리를 해야될 것 같은 기분이다.
 
뭔가 내가 C,C++에 익숙해지기도 전에 뭔가 바뀌는 느낌이라 마음에 들지는 않지만 회사는 이익을 추구하는 집단이기에 맞는 선택이라고도 생각한다.

나도 Qt를 쓰고 싶지만 라이선스 비용이 생각보다 많이 비싸다.   

이왕 이렇게 처음부터 다시 공부하게된거 전부터 궁금했던 Rust를 쓰고 싶은데 GTK를 Rust로 쓰거나 아니면 Tauri를 쓰고싶은데 사실상 생산성 문제로 일렉트론을 쓰게 될 것 같은 느낌이다.

다 주니어 되면 한 언어만 깊게 파라는데 나에게 그럴 시간을 좀 줬으면 좋겠다....



퇴근 후 공부

  

프로세스간 통신의 이해

  
프로세스 A가 프로세스 B에게 다음과 같이 말한다.  
  
"특정 변수가 생기면 변수 1로 변경하겠다 그리고 그 변수를 갂으면 0으로 바꾸겠다. 그러니 그 변수값을 통해 내 상태를 파악해라 "  
  
프로세스 A는 만든 변수를 통해 자신의 상태를 프로세스 B에게 말한 셈이다.  
  
두 프로세스가 동시에 접근 가능한 메모리 공간만 있다면, 이 공간을 통해서 얼마든지 데이터를 주고 받을수있다.  
  
근데 프로세스는 별개의 메모리 공간을 가진다.  
  
그래서 프로세스간 통신은 운영체제가 별도로 마련한 방법을 통해서만 이루어진다.  
  
운영체제는 그래서 별도의 메모리 공간이 존재하는 파이프라는 것을 생성한다.  
  
파이프는 2개의 파일 디스크립터가 할당되는데 이거는 운영체제에서 부모프로세스에게 주는것이다.   
  
이는 2개의 파일디스크립터로 pipe를 이용해 통신 하기 위한 것이다.  
  
파이프 자체는 소켓처럼 운영체제에 속하는 자원이고, 그러므로 복사되지 않기 때문이다.  
  
즉 운영체제가 마련해주는 메모리 공간을 통해 거기에 존재하는 파일 디스크립터들을 사용해 두 프로세스는 통신하게 된다.  
  
코드에서는 pipe함수를 호출하고 fork함수를 호출해야하는데 이는 자식 프로세스는 부모 프로세스의 파일디스크립터까지 복사되기때문에 이를 이용하여 pipe에 접근하여 통신하는 것.  


int pipe(int filedes[2]);


  
filedes[0] : 파이프로부터 데이터를 수신하는데 사용되는 파일 디스크립터가 저장된다. 즉, filedes[0]는 파이프의 출구가 된다.  
  
filedes[1] : 파이프로 데이터를 전송하는데 사용되는 파일 디스크립터가 저장된다. 즉, filedes[1]은 파이프 입구가 된다.  
  
0= read  
1 = write  
  
길이가 2인 int 형 배열의 주소 값을 인자로 전달하면서 함수를 호출하면 배열에는 두 개의 파일 디스크립터가 담긴다.   
  
하나의 파이프를 이용해서 양방향 통신을 하는 경우, 데이터를 쓰고 읽는 타이밍이 매우 중요해진다.  
  
그런데 이를 컨트롤 하는 것은 사실상 불가능하기 때문에 이는 적절한 방법이 될 수 없다.  
  
그래서 sleep으로 타이밍을 늦출수있지만 이는 적절한 해결법이 아니다.  
  


파이프 2개 사용

  
이런 경우 파이프를 2개 생성한다.  
  
그러면 실질적으로 만들어지는 파일디스크립터는 4개이지만 사용하는건 2개이다.  
  
왜냐하면 하나의 파이프에는 부모가 보내기만 하기에 이때 자식은 read만 하면 되고  
다른 하나의 파이프는 자식이 보내기는 것이기에 부모는 해당 파이프에 read만 하면된다.  
  
그러면 프로세스당 각 파이프에 사용하는 파일 디스크립터가 1개씩 이므로 총 2개이다.

'일상,취미' 카테고리의 다른 글

다시 시작하는 TIL 29일차  (0) 2024.07.22
다시 시작하는 TIL 28일차  (6) 2024.07.20
다시 시작하는 TIL 26일차  (0) 2024.07.16
다시 시작하는 TIL 25일차  (0) 2024.07.12
다시 시작하는 TIL 24일차  (0) 2024.07.10