핸들(컴퓨팅)

Handle (computing)

컴퓨터 프로그래밍에서 핸들애플리케이션 소프트웨어가 데이터베이스나 운영 체제와 같은 다른 시스템에 의해 관리되는 메모리 블록이나 개체를 참조할 때 사용되는 리소스에 대한 추상 참조입니다.

리소스 핸들은 불투명식별자일 수 있으며, 이 경우 종종 정수(대개 해당 유형의 리소스를 관리하는 데 사용되는 배열 또는 "테이블"의 배열 인덱스)이거나 추가 정보에 액세스할 수 있는 포인터일 수 있습니다.일반적인 리소스 핸들에는 파일 기술자, 네트워크 소켓, 데이터베이스 연결, 프로세스 식별자(PID) 및 작업 ID가 포함됩니다. PID 및 작업 ID는 명시적으로 볼 수 있는 정수입니다. 파일 기술자 및 소켓(많은 경우 파일 기술자의 형태로 구현됨)은 정수로 표현되지만 일반적으로 불투명하다고 간주됩니다.기존 구현에서 파일 기술자는 (프로세스별) 파일 기술자 테이블의 인덱스이며, 이후 (시스템 전체) 파일 테이블의 인덱스입니다.

포인터와의 비교

포인터가 참조하는 항목의 주소를 포함하는 동안 핸들은 외부에서 관리되는 참조의 추상화입니다. 그 불투명도는 시스템에서 핸들을 무효화하지 않고 참조를 메모리로 재배치할 수 있도록 합니다.이것은 포인터로는 불가능합니다.또한 간접 레이어가 추가되면 관리 시스템이 참조에 대해 수행하는 작업에 대한 제어가 향상됩니다.일반적으로 핸들은 전체 묘석 배열에 대한 인덱스 또는 포인터입니다.

핸들 리크는 컴퓨터 프로그램이 리소스에 핸들을 요구하지만 사용되지 않게 되었을 때 핸들을 해제하지 않을 때 발생하는 소프트웨어 버그의 일종입니다.이것은 메모리 포인터의 메모리 리크와 같은 자원 리크의 일종입니다.

보안.

안전한 컴퓨팅 용어에서는 핸들을 통한 리소스에 대한 액세스는 다른 시스템에 의해 조정되기 때문에 핸들은 기능으로서 기능합니다.이것은 오브젝트를 식별할 뿐만 아니라 액세스 권한도 관련짓습니다.예를 들어, 파일명이 위조 가능한 경우(추측 가능한 식별자일 뿐) 외부 시스템에서 사용자에게 핸들이 제공되므로 ID뿐만 아니라 액세스 권한도 나타납니다.

예를 들어, 프로그램이 시스템 비밀번호 파일을 읽으려고 하는 경우(/etc/passwd읽기/쓰기 모드( )O_RDWR)는, 다음의 콜을 개입시켜 파일을 열려고 할 가능성이 있습니다.

인트 fd = 열다.("/etc/passwd", O_RDWR); 

이 콜은 지정된 접근권을 가진 지정된 파일을 열도록 운영시스템에 요구합니다.OS가 이를 허용하면 파일이 열리고(프로세스별 파일 기술자 테이블에 엔트리가 생성됨) 사용자에게 핸들(파일 기술자, 이 테이블 인덱스)이 반환됩니다.실제 액세스는 OS에 의해 제어되며 핸들은 그 토큰입니다.반대로 OS는 접근을 거부하여 파일을 열거나 핸들을 반환하지 않을 수 있습니다.

기능 기반 시스템에서는 프로세스 간에 관련 접근 권한과 함께 핸들을 전달할 수 있습니다.이러한 경우 핸들은 시스템 전체의 고유한 작은 정수 이외의 것이어야 합니다.그렇지 않으면 위조할 수 있습니다.그럼에도 불구하고 이러한 정수는 프로세스 내부의 기능을 식별하기 위해 사용될 수 있습니다. 예를 들어 Linux의 파일 기술자는 수치만으로는 의미가 없고 프로세스 컨텍스트에서만 어떤 것이든 참조할 수 있기 때문에 용서할 수 없습니다.이러한 핸들 전송은 송신 프로세스와 수신 프로세스에서 값이 달라야 하는 경우가 많기 때문에 각별한 주의가 필요합니다.

한편, 비기능 베이스의 시스템에서는, 자원의 ID 와 목적의 액세스 권한을 지정해, 각 프로세스가 독자적인 핸들을 취득할 필요가 있습니다(예를 들면, 각 프로세스는 파일명과 액세스 모드를 부여해 파일 자체를 열 필요가 있습니다).이러한 사용은 통과 핸들을 지원하는 최신 시스템에서도 더 일반적이지만, 혼란스러운 대리 문제와 같은 취약성에 노출될 수 있습니다.

핸들은 Mac OS[1] Windows같은 1980년대 운영 체제에서 메모리 관리의 일반적인 솔루션이었습니다.C 표준 I/O 라이브러리의 FILE 데이터 구조는 기본 파일 표현에서 추출되는 파일 핸들입니다(유닉스에서는 파일 기술자입니다).다른 데스크톱 환경과 마찬가지로 Windows API는 시스템 내의 객체를 나타내며 운영체제와 사용자 공간 간의 통신 경로를 제공하기 위해 핸들을 많이 사용합니다.예를 들어 데스크톱의 창은 유형의 핸들로 표시됩니다.HWND(창문, 창)

사용 가능한 메모리의 증가와 향상된 가상 메모리 알고리즘이 더 단순한 포인터의 사용을 더욱 매력적으로 만들었기 때문에 이중 간접 핸들(핸들이 반드시 포인터일 필요는 없지만 정수일 수 있음)은 최근에 인기가 없어졌습니다.그러나 많은 운영체제는 여전히 불투명한 "프라이빗" 데이터 구조(투명 포인터)에 대한 포인터 또는 하나의 프로세스에서 클라이언트로 전달되는 내부 어레이에 대한 인덱스에 이 용어를 적용합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Hertzfeld, Andy (January 1982), The Original Macintosh: Hungarian, retrieved 2010-05-10

외부 링크