베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 이펙티브자바
    • 자바
    • 데이터베이스
    • dfs
    • 알고리즘
    • 토비스프링
    • 스레드
    • leetcode
    • 백준
    • 함수형인터페이스
    • 코드업
    • 스프링
    • 운영체제
    • BFS
    • jpa
    • java
    • 자바8
    • C++
    • Spring
    • 스프링시큐리티

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    [운영체제] Mach 메세지 전달
    운영체제(OS)/공룡책

    [운영체제] Mach 메세지 전달

    2021. 3. 24. 23:18

    Mach에서 대부분의 통신 메일박스(포트)로 메세지를 주고 받으면서 수행된다.

     

    각 포트에는 그 포트와 상호 작용하는데 필요한 자격을 식별하는 포트 권한이 필요하다.

    1 ) MACH_PORT_RIGHT_RECEIVE

    2 ) MACH_PORT_RIGHT_SEND

     

    태스크가 생성이 되면 Task self 포트와 Notify 포트라는 두 개의 포트가 생성된다.

    이 두 가지 포트는 커널과 송수신 권한을 가지고 있기 때문에, 태스크는 커널을 통해 메세지를 보낼 수 있고, 커널은 이벤트 발생 알림 작업을 태스크로 보낼 수 있다.

     

    mach_port_allocate() 함수는 새 포트를 작성하고 메세지 큐를 위한 공간을 할당한다.

    mach_port_t port;
    mach_port_allocate(
    	mach_task_self(),
        MACH_PORTRIGHT_RECEIVE,
        &port
    )

     

    mach_msg()함수는 메세지를 보내고 받는 표준 API이다. 함수의 매개 변수 중 하나가

    MACH_SEND_MSG / MACH_RCV_MSG를 갖는다.

     

    mach_msg()는 mah_msg_trap()함수를 호출한다.(mah커널에 대한 시스템 콜)

    이 후 커널 내에서 mach_msg_trap()은 mach_msg_overwrite_trap()함수를 호출하여 메세지의 실제 전달을 처리한다.

     

    Mach의 문제점은 송신자의 포트에서 수신자의 포트로 메세지를 복사해야 하므로 발생하는 성능 저하이다.

     


    Windows에서 응용 프로그램은 메세지 전달 기법을 통해 서로 통신한다.

    메세지 전달 설비는 고급 로컬 프로시저 호출 설비(ALPC)라 불리며, 동일 기계상에 있는 두 프로세스간의 통신에 사용한다. Mach와 유사하게, windows는 두 프로세스 간에 연결을 구축하고 유지하기 위해 연결 포트와 통신 포트를 이용한다.

     

    과정은 다음과 같다.

    1 ) 서버 프로세스는 모든 프로세스가 접근할 수 있는 연결 포트 객체를 공표한다.

     

    2 ) 클라이언트가 서버시스템으로부터 서비스를 원할 경우, 서버의 연결 포트 객체에 대한 핸들을 열고 연결 요청을 보낸다.

     

    3 ) 서버는 채널을 생성하고 핸들을 클라이언트에게 반환한다.

    가운데 빨간색 박스는 통신 채널이며 이 채널을 통해 서로 정보를 주고 받는다

    cf ) 대용량 메세지(256byte이상)은 반드시 섹션 객체를 통하여 전달되어야 한다. 

         섹션객체란 채널과 연관된 공유 메모리의 영역을 말한다.

      '운영체제(OS)/공룡책' 카테고리의 다른 글
      • [운영체제] 소켓
      • [운영체제] 파이프
      • [운영체제] POSIX 공유 메모리
      • [운영체제] 프로세스의 생성과 종료
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바