Rukojeť (výpočetní) - Handle (computing)

V počítačovém programování je popisovač abstraktní odkaz na prostředek, který se používá, když aplikační software odkazuje na bloky paměti nebo objekty, které jsou spravovány jiným systémem, jako je databáze nebo operační systém .

Popisovač prostředku může být neprůhledný identifikátor , v takovém případě se často jedná o celočíselné číslo (často index pole v poli nebo „tabulce“, která se používá ke správě daného typu zdroje), nebo to může být ukazatel, který umožňuje přístup k dalším informacím. Mezi běžné popisovače prostředků patří deskriptory souborů , síťové zásuvky , databázová připojení , identifikátory procesů (PID) a ID úloh . PID a ID úlohy jsou explicitně viditelná celá čísla; zatímco popisovače souborů a sokety (které jsou často implementovány jako forma popisovače souborů) jsou reprezentovány jako celá čísla, jsou obvykle považovány za neprůhledné. V tradičních implementacích jsou deskriptory souborů indexy do tabulky deskriptorů souborů (na proces) , odtud (celosystémové) tabulky souborů .

Srovnání s ukazateli

Zatímco ukazatel obsahuje adresu položky, na kterou odkazuje, popisovač je abstrakcí odkazu, který je spravován externě; jeho neprůhlednost umožňuje systému přemístit referenta do paměti bez zneplatnění popisovače, což je u ukazatelů nemožné. Extra vrstva indirection také zvyšuje kontrolu, kterou má řídící systém nad operacemi prováděnými s referentem. Obvykle je popisovač index nebo ukazatel do globálního pole náhrobků .

Nevracení úchyt je typ softwarové chyby , ke kterému dochází, když počítačový program požádá o rukojeť na zdroj, ale neuvolní popisovač, když již není používán; toto je forma úniku prostředků , podobná nevracení paměti pro ukazatel na paměť.

Bezpečnostní

Pokud jde o zabezpečené výpočty , protože přístup k prostředku prostřednictvím popisovače je zprostředkován jiným systémem, funguje popisovač jako schopnost : nejen identifikuje objekt, ale také přiřazuje přístupová práva . Například, zatímco souboru je forgeable (je to jen identifikátor uhodnout), rukojeť je dána uživateli externím systémem, a tak představuje nejen identitu, ale také udělil přístup.

Pokud si například program přeje přečíst soubor systémového hesla ( /etc/passwd) v režimu čtení/zápis ( O_RDWR), může se pokusit soubor otevřít pomocí následujícího volání:

int fd = open("/etc/passwd", O_RDWR);

Toto volání požádá operační systém o otevření zadaného souboru se zadanými přístupovými právy. Pokud to OS umožňuje, otevře soubor (vytvoří záznam v tabulce deskriptorů souborů pro každý proces ) a vrátí uživateli úchyt (deskriptor souboru, index do této tabulky): skutečný přístup je řízen OS, a rukojeť je toho důkazem . Naopak OS může odepřít přístup, a tedy ani neotevřít soubor, ani vrátit popisovač.

V systému založeném na schopnostech lze mezi procesy předávat popisovače s přidruženými přístupovými právy. Všimněte si, že v těchto případech musí být popisovač něco jiného než celočíselné jedinečné celé číslo, jinak je to snesitelné. Takové celé číslo však může být použito k identifikaci schopnosti uvnitř procesu; např. deskriptor souborů v Linuxu je neodpustitelný, protože jeho číselná hodnota sama o sobě nemá význam a pouze v kontextu procesu může odkazovat na cokoli. Přenos takového držadla však vyžaduje zvláštní péči, protože jeho hodnota se často musí v procesech odesílání a přijímání lišit.

Na druhé straně v systémech, které nejsou založeny na schopnostech, musí každý proces získat svůj vlastní samostatný popisovač zadáním identity zdroje a požadovaných přístupových práv (např. Každý proces musí otevřít samotný soubor zadáním názvu souboru a přístupový režim). Takové použití je běžnější i v moderních systémech, které podporují předávání úchytů, ale podléhá zranitelnostem, jako je problém zmateného zástupce .

Příklady

Rukojeti byly oblíbeným řešením správy paměti v operačních systémech 80. let, jako jsou Mac OS a Windows . Datová struktura FILE ve standardní knihovně I/O C je popisovač souboru , který abstrahuje od podkladové reprezentace souboru (v Unixu jsou to deskriptory souborů ). Stejně jako ostatní desktopová prostředí , Windows API ve velké míře využívá úchytky k reprezentaci objektů v systému a k poskytování komunikační cesty mezi operačním systémem a uživatelským prostorem . Například okno na ploše je reprezentováno popisovačem typu HWND(popisovač, okno).

Zdvojnásobení nepřímých úchytů (kde úchyt nemusí být nutně ukazatel, ale může to být například celé číslo) v poslední době upadá v nemilost, protože díky zvýšení dostupné paměti a vylepšeným algoritmům virtuální paměti je používání jednoduššího ukazatele více přitažlivý. Mnoho operačních systémů však tento termín stále používá pro ukazatele na neprůhledné, „soukromé“ datové struktury - neprůhledné ukazatele - nebo pro indexy do interních polí předávaných z jednoho procesu do jeho klienta .

Viz také

Reference

externí odkazy