# IPC

54개의 포스트

프로세스간 통신

IPC (Interprocess Communication) 독립적인 프로세스는 프로세스끼리 자원을 공유할 필요가 없기 때문에, CPU스케줄링을 잘해주면 프로세스간에 영향을 미치지 않는다. 하지만 프로세스간 협력이 필요한 경우엔 자원을 공유해야한다. IPC란 프로세스들 사이에 서로 데이터를 주고받는 행위나 방법 또는 그 경로를 말한다. 각 프로세스는 자신의 독립적인 메모리 공간을 가지고, 그것을 보호하고 있기 때문에 통신을 위한 별도의 매커니즘이 필요하다. 프로세스간 협력이 필요한 이유 1) 정보 공유 : 여러 사용자가 동일한 정보를 필요로 함 2) 계산 가속화 : 특정 작업을 빠르게 실행하기 위해 해당작업을 서브 task로 나누어 병렬로 실행할 수 있음 3) 모듈성 : 특정한 시스템 기능을 별도의 프로세스로 구분하여 모듈식 형태로 시스템을 구성할 수 있음 4) 편의성 : 여러 사용자들이 동시에 많은 작업을 수행할 수 있음 운영체제가 지원하는 IPC 모

3일 전
·
0개의 댓글
·
post-thumbnail

[OS] IPC

프로세스와 스레드 (먼저 보시면 좋습니다) 📌 Process & Thread, Mutli Process & Thread # IPC > Inter-Process Communication = 내부 프로세스 간 통신 > > 운영체제 상에서 실행중인 프로세스 간에 정보를 주고받는 것. 프로세스는 자신에게 할당된 메모리 내의 정보만 접근할 수 있고, 이를 벗어난 경우 Segmentation Fault 등의 오류가 발생한다. 이는 안전성을 위해 OS에서 자신 프로세스의 메모리에만 접근하도록 강제하고 있기 때문이다. > 따라서 한 프로그램에서 병렬성을 키우면서 공유되는 데이터를 사용하기 위해 메모리 공간을 공유하는 스레드를 이용하는 경우가 많다. 하지만 이것은 하나의 프로그램에서만 의미가 있고,

5일 전
·
0개의 댓글
·
post-thumbnail

프로세스 관리

💡 프로세스 관리 > 프로세스에 대해 배웠으니 이제 프로세스 관리에 대한 내용을 다뤄보겠다. > 📌 순서 >> 프로세스 생성(Process Creation) 프로세스 종료(Process Termination) 프로세스 시스템 콜(System Call) 프로세스 간 협력 🌟 프로세스 생성(Process Creation) > 부모 프로세스가 자식 프로세스를 생성한다✔️ >> 👉🏻 Parent process가 children process를 생성한다. 👉🏻 운영체제에 요청하여 자식 프로세스를 만든다. > 프로세스의 트리(계층 구조) 형성✔️ 프로세슨 자원을 필요로 한다✔️ >> 👉🏻 운영체제로부터 자원을 받는다. 👉🏻 이례적인 경우 부모와 공유한다. 일반적으로 프로세스들은 자원을 두고 경쟁한다. > 자원의 공유✔️ >> 👉🏻 부모와 자식이 모든 자원을 공유하는 모델 >> 👉🏻 일부를 공

2023년 8월 31일
·
0개의 댓글
·

CAN Data 및 piracer 배터리 잔량 dbus전송

아두이노로부터 CAN을 통해 받은 rpm 값은 get_rpm 메서드를 통해 호출이 가능하고, piracer의 배터리 잔량은 piracer 라이브러리를 사용하여 전압값을 받아온 후 위 계산과정을 통해 배터리 잔량 근사값으로 변환한다. 이유는 모르겠지만 get_fuel의 리턴값은 float형 데이터이지만 보낼때는 double형으로 xml에 정의해줘야된다,,, 왜그런지 모르겠다

2023년 8월 9일
·
1개의 댓글
·

pydbus 기본 예제

send_dbus.py recv_dbus.py 위 코드와 같이 D-Bus 연결을 위해 세션버스 연결 및 경로(name)설정이 필요하다. 위 코드에서 경로는'com.example.dbusService' 이고 경로는 컴퓨터 내 공간이 아닌 D-bus의 이름을 할당해주는 것이기 때문에 컴퓨터 내부 경로와 혼동하지 말아야 한다. 받는쪽에서는 send측에서 정의한 경로를 통해 D-bus에 진입하고 메서드를 호출함으로써 데이터를 불러올 수 있다. 이유는 모르겠지만 send 파일을 처음에 만들 때 init 함수를 안만든채로 실행시켰더니 dbus가 실행되지 않았다. 꼭 필요한듯하다,, 다음 명령어를 통해 위 코드 실행이 가능하다. 다음은 CAN Data를 받아온 후 D-bus로 publish 하는 코드이다. can_publish.py 위 코드는 아두이노가 보낸 CAN Data를 Raspberry pi를 통해 받고, 이를 pydbus를 사용하여 dbus내

2023년 8월 6일
·
0개의 댓글
·

[운영체제] IPC(Inter Process Communication)

들어가기전에 기본적으로 각 프로세스는 메모리에 별도의 주소 공간에서 실행되기 때문에, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음. 하지만 대부분의 컴퓨터 프로그램을 보면 다른 프로그램에 있는 정보를 가져오는 경우를 쉽게 볼 수 있음 여러가지 방법으로 프로세스가 다른 프로세스의 정보에 접근하는 게 가능함. 프로세스 간 정보를 공유하는 방법으론 IPC, LPC, 별도 공유 메모리 생성이 있다. IPC(Inter Process Communication) IPC란? > Inter Process Communication의 약자로 운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 메커니즘을 말함. 종류로는 커널이 제공하는 API를 이용하는 메시지 전달 방식, 프로세스끼리 특정 공통의 메모리 영역을 공유하는 메모리 공유 방식, 소켓방식, Named PIPE 방식 등등이 있다. 프로세스는 완전히 독립된 실행객체

2023년 7월 31일
·
0개의 댓글
·
post-thumbnail

Process Management

이화여자대학교 반효경 교수님의 2014년 Operating System 강의를 시청한 후 정리한 내용이다. http://kocw.net/home/cview.do?cid=3646706b4347ef09 Process Creation 프로세스는 부모 프로세스로부터 생성되어 부모-자식 관계가 형성되어 트리 형태의 계층을 이룬다(모든 프로세스의 조상은 init이다). 프로세스의 생성 시 커널의 도움을 받는다. 생성된 자식 프로세스는 OS의 자원을 받아서 실행되는데, 이때 부모와의 자원 공유 여부에 따라 3가지로 나뉜다. 부모 프로세스의 자원을 공유하지 않는 프로세스: 일반적으로 생성된 자식 프로세스는 부모와 별개의 존재이므로 서로 자원을 얻기 위해 경쟁한다. 부모 프로세스의 일부 자원을 공유하는 프로세스 부모 프로세스의 모든 자원을 공유하는 프로세스 시스템 콜 fork()를 사용하여 자식 프로세스를 생성하면, 자식의 메모리 공간에 부모의

2023년 6월 27일
·
0개의 댓글
·
post-thumbnail

[운영체제] IPC (Inter Process Communication), 프로세스 간 통신

📌 Inter Process Communication 프로세스 간 소통 방법 프로세스는 독립적 (independent)이거나 다른 프로세스와 협력(cooperating)한다. 독립적인 프로세스는 동시에 실행 중인 다른 프로세스에 영향을 주지 않지만, 협력이 필요한 프로세스의 경우 다른 프로세스에 영향을 주거나 받을 수 있다. ○ IPC가 필요한 이유 1. 정보 공유 여러 사용자가 동일한 정보에 관심을 가지면, 이 정보에 동시에 접근할 수 있는 환경을 제공해야 한다. 2. 계산 속도 증가 특정 작업 (연산)을 빠르게 실행하기 위해서는 작업은 작은 단위로 나누어서 병렬로 실행할 수 있다. 3. 모듈성 시스템 기능을 프로세스 단위 또는 스레드 단위로 나눈 모듈 방식으로 시스템을 구성할 수 있다. 4. 편리성 개별 사용자도 동시에 많은 작업을 수행할 수 있다. (예, 편집, 인쇄, 컴파일 등) > 그러나 일반적으로 각 프로세

2023년 5월 31일
·
0개의 댓글
·
post-thumbnail

[CS스터디]IPC

⛳ 다른 프로세스에게 영향을 받지 않는 프로세스! 독립적으로 실행되는 프로세스는 어떻게 서로 통신할까? IPC란? : Inter Process Communication, 프로세스 간 통신 ✔️ 독립 실행 객체인 프로세스가 서로 통신하기 위해서는 커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공함. IPC 종류 1. PIPE 한 쪽 방향으로만 통신이 가능한 반이중 통신 파이프가 두 개의 프로세스를 연결하는데, 하나는 데이터 READ, 나머지 하나는 데이터

2023년 5월 29일
·
0개의 댓글
·
post-thumbnail

[OS] Extra. IPC

Inter-Process Communication 운영체제 상에서 실행중인 프로세스 간에 정보를 주고받는 것을 의미합니다. 프로세스는 할당된 메모리 내의 정보만 접근할 수 있습니다. 그래서 데이터를 공유하기 위해서 메모리 공간을 공유하는 스레드를 이용하는 경우가 많습니다. 하지만 스레드는 결국 한 프로그램 안에서 메모리 공간을 공유하는 것입니다. 결국 서로 다른 프로그램(프로세스)의 데이터를 공유하려면 다른 프로세스의 메모리에 접근해야 합니다. 1. PIPE 두 개의 프로세스를 연결합니다. 하나의 프로세스는 데이터를 쓰기만 가능하고 다른 프로세스는 데이터를 읽기만 가능합니다. 따라서 PIPE는 단방향 통신만 가능합니다. 양방향 통신을 원한다면 PIPE를 두 개 만들어야 합니다. PIPE는 매우 간단하게 사용할 수 있다는 장점이 있습니다. 단순한 단방향 통신만 원한다면 고민없이 PIPE를 사용하면 됩니다. 하지만 양방향 통신을 하기 위해서 PIPE를 2개 만들어야 하는

2023년 4월 14일
·
0개의 댓글
·
post-thumbnail

[CS] IPC share memory

공유 메모리 함수 shmget() System V 공유메모리 새 메시지 대기열을 생성하거나 기존 대기열에 액세스하기 위해 shmget() 시스템 호출이 사용됩니다. 매개변수 key : 공유 메모리의 식별자를 얻기위한 고유한 값 size : 공유메모리를 할당 받을 size shmflg : IPCCREAT(새로운 키면 식별자 새로 생성), IPCEXCL(이미 존재하는 키면 오류 발생) 두가지 설정 가능 반환 값 RETURNS: 성공 시 공유 메모리 세그먼트 식별자 오류 시 -1 : errno errno EINVAL(잘못된 세그먼트 크기가 지정됨) EEXIST(세그먼트 존재, 생성 불가) EIDRM(세그먼트가 삭제 표시되었거나 제거됨) ENOENT(세그먼트가 존재하지 않음) EACCES(허가 거부됨) ENOMEM(세그먼트를

2023년 4월 5일
·
0개의 댓글
·
post-thumbnail

[CS] IPC 세마포어

세마포어 > 세마포어는 Message queue, Share memory의 프로세스간 메시지 전송의 목적과는 다르게 프로세스간 데이터를 동기화하고 보호하는데 목적이 있습니다. semid_ds 구조체 커널에서 세마포어 정보를 유지하기위해 관리하는 구조체입니다. 이 구조는 semid_ds 유형 이며 다음과 같이 에 정의되어 있습니다. 내부 변수들 sem_perm 이것은 linux/ipc.h 에 정의된 ipc_perm 구조 의 인스턴스입니다. 여기에는 액세스 권한 및 세트 생성자에 대한 정보(uid 등)를 포함하여 세마포어 세트에 대한 권한 정보가 포함됩니다. -> (세마포어 구조체에 접근할 수 있는 사용자 권한 설정) sem_otime 마지막 semop() 작업 시간(자세한 내용은 잠시 후) sem_ctime 이 구조에 대한 마지막 변경 시간(모드 변경 등) sem_nsems 세마포어 세트(배열)의 세마포어 수

2023년 4월 4일
·
0개의 댓글
·
post-thumbnail

[Network] IPC message queue 사용해보기

ipcmessagequeue.h > tmsgbuf 구조체의 mtype 변수는 양의 정수를 가져야만 합니다. send.c msgget 고유한 key를 넣으면 그에 대한 식별자(msgid)를 리턴해줍니다. key값은 ftok() 함수를 사용해서 만들 수도 있습니다. 이 msgid는 커널에서 다루는 msg queue를 식별하는 식별자입니다. msgsnd 버퍼에 담긴 데이터를 커널의 message queue에 메모리를 복사합니다. 만약 대기열이 충분하지 않다면 msgsnd()의 기본 동작은 공간이 사용가능해질 때 까지 차단합니다. IPC_NOWAIT가 msgflg에 지정된 경우 대신 EAGAIN 오류와 함께호출 실패합니다. 성공적으로 완료시 message queue 의 data structure는 다음과 같이 업데이트 됩니다. msg_lspid는 호출 프로세스의 프로세스 ID로 설정됩니다. msg_qnum은 1씩 증가합니다. msg_

2023년 4월 3일
·
0개의 댓글
·
post-thumbnail

pipex(1) - 프로세스와 프로세스간 통신 IPC

pipex 프로그램은 리눅스 환경에서 사용 가능한 파이프라인 '|'을 구현하는 프로젝트입니다. 우선 파이프라인에 대해 구현하기 전에 프로세스가 무엇인지 그리고 프로세스 간 통신인 ipc에 이해하고 시작하겠습니다. 프로그램 (Program) 프로그램은 컴퓨터에서 실행될 때 특정 작업을 수행하는 일련의 명령어들의 모음입니다. 우리가 코딩으로 작성하는 소스코드들의 묶음을 말하며, 명령어들의 모음일 뿐이지 프로그램 자체만으로 무언가 일을 할 수 있는 게 아닙니다. 이는 저장 장치에 저장되어 있지만, 메모리에는 올라가지 않아 실행되고 있지 않은 정적인 상태를 의미 제 mac의 프로그램들입니다. 흔히 알고 있는 .exe 파일들을 말하며, 이를 실행시키기 위해서는 컴퓨터의 메모리 위에서 실행시켜야 합니다.

2023년 4월 2일
·
0개의 댓글
·
post-thumbnail

OS #4 PCB, IPC, Semaphore & Mutex

Process Management : 프로세스가 여러개일 때 CPU 스케줄링을 통해 관리하는 것을 말함 이때 CPU는 각 프로세스들이 누군지 알아야 관리가 가능하다. 프로세스들의 특징을 갖고있는 것이 바로 Process Metadata이고 이들은 프로세스가 생성되면 PCB이라는 곳에 저장된다. 따라서 각 프로세스가 생성되면 고유의 PCB가 생성되고 프로세스가 완료되면 PCB는 제거된다. ✅ PCB(Process Control Block) >### 🎈 PCB가 왜 필요한가? > CPU에서 프로세스 상태에 따라 교체작업이 이루어진다. (인터럽트가 발생해 할당받은 프로세스가 대기 상태가 되고 타 프로세스를 running으로 바꿔 올릴 때) > > > : 프로세스 메타데이터들을 저장해 놓는 곳, 한 PCB

2023년 3월 6일
·
0개의 댓글
·
post-thumbnail

[cs 기초 갈고닦기] 멀티프로세싱, 예시

멀티프로세싱 > - 가정 : 1대인데 프로세서는 2개 이상이다. > - 여러 개의 프로세서가 서로 협력적으로 일을 처리하는 것 대표적인 멀티 프로세스 구조 : 웹 브라우저 대표적으로 멀티 프로세스 구조를 웹 브라우저들이 가지고 있다. 그런데 왜? 멀티 프로세스로 구성이 되어있을까? 멀티 프로세스로 한 이유 싱글 프로세스로 했다면 브라우저의 탭이 여러 개일 경우 하나의 잘못된 페이지에 접근해서 랜더링 문제가 일어났을 때 브라우저가 전체적으로 종료될 수 있기 때문 프로세스 분리를 통해 프로세스가 접근 가능한 메모리 범위를 격리하고 보호할 수 있기 때문 웹 브라우저 프로세스의 종류 브라우저 프로세스 : 주소 표시줄, 북마크 막대, 뒤로가기 버튼, 앞으로 가기 버튼 등을 담당, 네트워크 요청이나 파일 접근 같은 권한 담당 랜더러 프로세스 : 웹 사이트가 '보이는' 부분의 모든 것을 제어 플러그인 프로세스 : 웹 사이트에서 사용하는 플

2023년 3월 3일
·
0개의 댓글
·

04. 프로세스2

스레드 스레드: 프로세스를 구성하는 실행 단위. 프로세스를 구성하는 실행의 흐름 단위. 하나의 프로세스는 여러 개의 스레드를 가질 수 있다. 스레드는 프로세스 내에서 실행에 필요한 최소한의 정보(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채 프로세스 자원을 공유하며 실행된다. 멀티 프로세스와 멀티 스레드 멀티 프로세스: 여러 프로세스를 동시에 실행하는 것 멀티 스레드: 여러 스레드로 프로세스를 동시에 실행하는 것 멀티 프로세스와 멀티 스레드의 차이는? 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다는 큰 차이점이 있다. 멀티 프로세스는 모든 자원이 별도로 사용되기 때문에 중복과 이에 따른 낭비가 발생할 수 있다. 하지만 자원을 공유하지 않기 때문에 각각의 프로세스가 독립적

2023년 1월 19일
·
0개의 댓글
·

메시지 큐(Message Queue)

Message Queue란 Message queue(MQ)란 메세지 지향 미들웨어(Message Oriented Middelware:MOM)을 구현한 시스템으로써, MOM이란 비동기 메시지를 사용하는 다른 응용 프로그램 사이에서 데이터 송수신하는것을 의미한다. IPC 도구중 하나로 시스템 프로그래밍에서 사용되며 각 데이터를 메시지 형태로 생성,전달이 가능하게끔 Queue 데이터 구조를 이용, 메시지 큐는 커널에서 전역적으로 관리되고 모든프로세스에서 접근 가능하도록 구성이 되어있어 하나의 메시지큐 서버가 커널에 요청해 메시지 큐를 작성하게 되면 해당식별자를 알고있는 모든 프로세서가 동일한 메시지 큐에 접근하여 메시지를 공유가능. 서로 다른 프로세스나 프로그램 사이에서 데이터를 송수신할때에는 AMQP(Advanced Message Queuing Protocol)을 이용하는데, 이 AMQP는 ISO응용계층 MOM의 표준이기도 하다. AMQP AMQP는 주로 JMS(Java M

2023년 1월 12일
·
0개의 댓글
·

OS Interview

Process 프로세스는 "실행 중인 프로그램" 하나의 프로그램이 여러 개의 프로세스가 될 수 있다. stack: 지역 변수 / 매개변수 저장 heap: 동적 메모리 할당 data: 전역 변수 / static 변수 code: 프로그램의 코드 / 컴파일된 기계어 Multi Process 여러 프로세스가 동시 실행 concurrency(동시성): 1 CPU / 시분할 시스템 parallelism(병렬성): N CPU 메모리 관리 메모리에 여러 개의 프로세스가 탑재된 경우,

2023년 1월 2일
·
0개의 댓글
·

프로세스(Process)와 쓰레드(Thread)

프로세스? 쓰레드? 프로세스(Process)란 컴퓨터에서 실행되고 있는 프로그램의 인스턴스화된 것을 의미하며 CPU 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같의 의미로 쓰인다. 다른 표현으로 운영체제로부터 자원을 할당받는 작업의 단위라고 설명할 수 있다. ex) 프로그램 - Chrome 프로세스 - Chrome을 더블클릭했을 때 실행되는 단위 쓰레드(Thread)란 프로세스 내 작업의 흐름을 지칭한다. 다른 표현으로 프로세스가 할당받은 자원을 이용하는 실행의 단위라고 설명할 수 있다. 차이에 대해 묻는 이유? 근본적으로 두 차이에 대한 질문은 운영체제가 시스템의 자원을 어떤 단위로 할당하는지, 프로세스와 쓰레드는 이 자원을 어떻게 사용하는지에 대해 질문하는 것. 멀티 쓰레드 멀티 쓰레드의 장점? 멀티 프로세스로 실행하는 작업을 멀티 쓰레드로 실행하는 이유는 프로세스를 생성하여 자원을 할당하는 시스템 콜

2022년 12월 11일
·
0개의 댓글
·