2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
프로세스 간 협업이 필요합니다. 예를 들어, 학교의 모든 관리 수준은 서로 연결되어 있어 수직적으로 관리할 수 없습니다. 프로세스가 협업해야 하기 때문입니다. 협업의 전제 조건은 프로세스가 통신해야 한다는 것입니다. 데이터에는 알림용 데이터도 있고, 단순히 전송되는 데이터도 있고, 제어 관련 데이터도 있습니다.
사실: 프로세스는 독립적입니다. 프로세스 = 커널 데이터 구조, 프로세스의 코드 및 데이터
프로세스 커뮤니케이션의 목적:
프로세스 간 통신 비용은 약간 더 높을 수 있습니다. 프로세스는 독립적이며 한 프로세스에서 열린 리소스는 다른 프로세스에서 볼 수 없습니다. 이전에 부모-자식 프로세스에 대해 이야기했을 때 부모 프로세스의 데이터는 자식 프로세스에 상속되었습니다. 이는 상속될 수 있지만 항상 상속되는 것은 아닙니다. 항상 정보를 전송할 수 있습니다.
프로세스 간 통신의 전제: 먼저 서로 다른 프로세스가 동일한(운영 체제) 리소스("메모리 조각")를 볼 수 있도록 합니다. 두 프로세스는 독립적입니다. 통신을 위해서는 두 프로세스가 동일한 메모리를 가질 수 있도록 하는 도구, 즉 운영 체제가 필요합니다. 운영 체제가 이를 수행하는 이유는 사용자가 결정합니다.
운영 체제에 리소스를 생성하도록 지시하는 방법:
파이프라인은 기본적으로 디스크에 플러시할 필요가 없는 메모리 수준 파일입니다.
첫째, 상위 프로세스는 읽기 및 쓰기 모드에서 파일을 두 번 엽니다. 파일을 두 번 여는 이유는 두 개의 구조체 파일 객체를 얻어서 파일에 대한 두 개의 읽기 및 쓰기 포인터가 있으므로 읽기 및 쓰기 작업이 가능하기 때문입니다. 이렇게 하면 읽기와 쓰기가 서로 영향을 주지 않습니다.읽기-쓰기 포인터는 현재 파일 읽기 또는 쓰기 위치를 기록합니다.struct file
파일에는 읽기-쓰기 포인터가 하나만 있습니다. 파일에 쓰기(또는 읽기)하면 읽기-쓰기 포인터가 이동한 다음 다시 읽기(쓰기)됩니다. 이때 읽기-쓰기 포인터는 더 이상 없습니다. 원래 위치에서는 방금 작성한 내용을 읽을 수 없으므로 동일한 파일을 다른 방법으로 두 번 열어야 합니다. 그런 다음 하위 프로세스를 생성합니다. 즉, 상위 프로세스에서 열린 파일을 상속합니다. 즉, 이때 상위 프로세스와 하위 프로세스는 하위 프로세스를 공유합니다. 프로세스는 파일 디스크립터 4번을 파일에 전달할 수 있습니다. 파일에 쓸 때 상위 프로세스는 파일 디스크립터 3번을 통해 파일에서 읽을 수 있습니다. 이때 상위 프로세스와 하위 프로세스는 데이터 전송, 즉 통신을 실현합니다. . 부모 프로세스와 자식 프로세스는 여기서 파이프 파일이라고 부르는 동일한 메모리 버퍼를 봅니다. 파이프는 단순성 때문에 단방향 통신만 허용합니다.
왜 부모-자식은 인쇄 데이터를 동일한 모니터 터미널로 처리합니까?
해당 하위 프로세스는 상위 프로세스에 해당하는 파일 설명자 테이블을 상속하고 동일한 파일을 가리키기 때문에 상위 프로세스는 파일을 입력하고 하위 프로세스도 파일을 입력하며 동일한 내용이 버퍼에 기록되며 운영 체제는 동일한 모니터에 플러시됩니다.
프로세스는 기본적으로 0, 1, 2의 세 가지 표준 입력 및 표준 출력을 엽니다. 기본적으로 0, 1, 2를 여는 방법은 무엇입니까?
모든 명령은bash
자식 프로세스bash
이 기능을 켜면 기본적으로 모든 하위 프로세스가 켜집니다.
상위 프로세스의 지속적인 모니터 파일 사용에 영향을 주지 않고 하위 프로세스가 적극적으로 닫히는 이유(0/1/2)는 무엇입니까?
메모리 수준 참조 카운팅--
, 메모리 수준 참조 횟수가 0으로 감소하면 파일 리소스가 해제됩니다.
부모-자식 프로세스는 불필요한 파일 설명자를 닫습니다. 이전에 열어야 했던 이유는 무엇입니까?
자식 프로세스가 상속받을 수 있도록 하기 위해서입니다. 닫을 필요는 없으나, 실수로 쓰는 것을 방지하기 위해 닫아 두는 것이 좋습니다.
파이프가 단방향 통신인 이유는 무엇입니까?
방법은 간단하고 개발 비용을 절감하며 단방향 통신만 허용합니다. 모든 파일이 버퍼에 새로 고쳐진 다음 데이터가 파일에 새로 고쳐집니다. 이 프로세스 자체는 단방향입니다.
우리가 생활에서 보는 단순한 파이프는 모두 수도관과 같이 입구와 출구가 하나인 단방향 파이프라인의 특성에 부합합니다.
사용할 수 있다pipe
명명되지 않은 파이프를 생성하려면 매개변수에 파일 경로와 파일 이름이 필요하지 않습니다.
int pipe(int pipefd[2]);