티스토리 뷰

반응형

 

프로세스, 핸들 테이블, 그리고 핸들 상속: 자원을 이어주는 설계 장치


🧩 서로 격리된 세계, 프로세스

컴퓨터에서 실행되는 프로그램은 모두 프로세스라는 독립된 단위로 운영된다.
각 프로세스는 자신만의 메모리 공간과 데이터, 코드, 실행 흐름을 가지고 있으며,
운영체제는 이러한 프로세스들 사이에 철저한 경계를 만든다.

이런 구조는 보안을 위해서도, 시스템 안정성을 위해서도 매우 중요하다.
하지만 때로는, 두 프로세스가 같은 리소스(예: 파일, 파이프, 이벤트 등)를 함께 써야 하는 상황이 생긴다.
예를 들어, 한 프로세스가 어떤 데이터를 생성하고,
다른 프로세스가 그 데이터를 읽어야 할 때처럼 말이다.

그렇다면 어떻게 해야 격리된 두 세계가 자원을 안전하게 공유할 수 있을까?


🔑 커널 오브젝트와 핸들: 운영체제의 자원 접근 열쇠

운영체제가 관리하는 자원—예를 들어 파일, 파이프, 프로세스, 이벤트, 뮤텍스 같은 것들—은
아무 프로그램이나 마음대로 사용할 수 없다.
직접적으로 건드릴 수 없도록 커널 내부에 보호된 채 존재한다.

그 대신 운영체제는 프로그램에게 일종의 간접적인 열쇠를 건네준다.
이 열쇠를 통해서만 커널 자원에 접근할 수 있게 만든다.
이 열쇠가 바로 **핸들(handle)**이다.

핸들은 프로그램이 커널 오브젝트에 요청을 보낼 수 있도록 해주는 식별자이자 접근 수단이다.
사용자는 핸들이 어떤 자원을 가리키는지 알 수 없고, 알 필요도 없다.
운영체제가 내부적으로 모든 것을 추적하고 제어하기 때문이다.


📁 핸들 테이블: 누구에게 어떤 자원이 있는지 정리한 목록

운영체제는 각 프로세스가 어떤 핸들을 가지고 있는지 추적하기 위해
**프로세스별로 "핸들 테이블"**이라는 목록을 유지한다.

핸들 테이블은 일종의 개인 자원 목록이다.
이 안에는 그 프로세스가 접근할 수 있는 모든 자원에 대한 핸들이 저장되어 있다.

중요한 점은 이 핸들 테이블이 프로세스마다 완전히 분리되어 있다는 것이다.
한 프로세스의 핸들은 다른 프로세스에게 아무 의미가 없다.
다른 프로세스는 그 핸들 번호로 아무 것도 할 수 없다.
마치 집마다 열쇠가 달라서, 내 집 열쇠로 남의 집 문을 열 수 없는 것처럼.


🧬 핸들의 상속: 부모가 자식을 낳으며 자원을 물려주는 방법

프로세스가 또 다른 프로세스를 만드는 경우를 생각해보자.
이런 관계를 부모 프로세스와 자식 프로세스라고 부른다.

부모가 자식을 만들면서 이렇게 말하고 싶을 수 있다.

"얘야, 내가 미리 열어놓은 이 파이프를 너도 같이 사용해라."
"이 이벤트 오브젝트를 같이 감시하자."
"같은 파일에 너도 로그를 남겨라."

하지만 앞서 말했듯, 각 프로세스는 서로의 핸들 테이블을 볼 수 없다.
그렇다면 이 리소스를 어떻게 같이 사용할 수 있을까?

그 해답이 바로 핸들의 상속이다.

핸들을 상속한다는 것은,
**부모 프로세스가 자식에게 특정 핸들을 "공식적으로 넘겨주는 행위"**다.
운영체제는 자식 프로세스를 만들 때, 부모가 지정한 일부 핸들을
자식의 핸들 테이블에도 등록해준다.

이 과정은 철저히 통제된 절차다.
부모가 명시적으로 "이 핸들은 상속 가능한 것으로 만들어 주세요"라고 요청해야 하고,
자식을 생성할 때도 "상속을 허용하겠습니다"라고 선언해야 한다.


🔁 왜 이런 절차가 필요할까?

핸들의 상속은 단순한 편의 기능이 아니다.
그것은 다음과 같은 이유로 설계적으로 필요하다.

✅ 자원을 공유해야 하는 구조에서 가장 단순하고 안정적인 연결 방법이다

  • 프로세스를 시작할 때부터 필요한 자원을 같이 가지고 시작할 수 있기 때문에
    별도의 통신이나 협상 과정이 필요 없다.

✅ 자식 프로세스가 사용할 자원의 범위를 정확히 제어할 수 있다

  • 어떤 자원을 줄지, 어떤 자원은 감추고 숨길지 명확하게 설정할 수 있다.

✅ 복잡한 IPC 없이도 실행 환경을 공유할 수 있다

  • 예를 들어 부모-자식이 같은 파이프의 양 끝을 나눠가지고,
    자연스럽게 데이터를 주고받을 수 있다.

이 방식은 단순하면서도 매우 강력하다.
시스템 구조상 부모가 자식에게 책임 있는 방식으로 자원을 넘겨줄 수 있는 유일한 통로이기 때문이다.


🎯 상속된 핸들은 단순한 복사가 아니다

핸들을 상속했다고 해서 자원이 복사되는 것은 아니다.
핸들이 가리키는 대상은 그대로 하나다.
그 자원을 두 개의 핸들이 동시에 참조하게 되는 것이다.

이는 마치 열쇠를 하나 더 만들어서 나눠 가진 것과 같다.
두 사람이 같은 방을 열 수 있지만,
그 방 자체는 단 하나다.

그래서 상속된 핸들은 같은 커널 오브젝트를 공유하며,
둘 중 어느 쪽이 자원을 조작하든, 그 효과는 공유된다.


🧭 이것이 어떤 의미를 가지는가?

운영체제는 자원의 보호와 공유 사이에서 늘 균형을 잡아야 한다.
무분별한 공유는 보안에 해가 되고,
무조건적인 격리는 협업을 불가능하게 만든다.

핸들의 상속은 이 둘 사이에서 매우 정교한 해답이다.

  • 자원은 여전히 보호된다. 함부로 건드릴 수 없다.
  • 하지만 원할 경우, 아주 명시적이고 안전한 방식으로 공유가 가능하다.
  • 부모는 자식에게 무엇을 줄지 선택할 수 있고,
    자식은 그 자원을 기반으로 자신만의 작업을 시작할 수 있다.

이처럼 핸들의 상속은 단순한 기능이 아니라,
운영체제가 다중 프로세스 구조에서 자원 흐름을 관리하는 가장 정교한 메커니즘 중 하나이다.


📌 요약하자면

항목 설명

핸들 커널 자원에 접근하기 위한 열쇠
핸들 테이블 각 프로세스가 가진 핸들의 목록
핸들 상속 부모가 자식을 생성할 때 특정 핸들을 같이 넘겨주는 설계 장치
목적 리소스를 공유하면서도, 접근과 사용을 통제하기 위해
효과 자원은 공유되되, 공유 여부는 프로그래머가 직접 통제 가능

 

반응형

'프로그래밍 > 시스템 프로그래밍' 카테고리의 다른 글

프로세스와 스레드  (0) 2025.03.31
파이프 방식의 IPC  (0) 2025.03.27
프로세스와 환경변수  (0) 2025.03.26
부모 프로세스 vs 자식 프로세스  (0) 2025.03.24
IPC 방법 - 메일슬롯  (0) 2025.03.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형