ukey_enable (Subroutine)

Zweck

Aktiviert Benutzerschlüssel in einem Prozess.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/ukeys.h>

int ukey_enable (void)

Beschreibung

Das Unterprogramm ukey_enable ermöglicht einem Prozess den Zugriff auf die Speicherschutzeinrichtungen für Benutzerschlüssel. Ein Prozess muss die Unterroutine ukey_enable erfolgreich aufrufen, um Benutzerschlüssel zu aktivieren, bevor er andere benutzerschlüsselspezifische APIs ausprobieren kann. Die folgenden Bedingungen sind erforderlich, um Benutzerschlüssel für einen Prozess zu aktivieren:
  1. Ausführung mit dem 64-Bit-Kernel. Benutzerschlüssel werden im 32-Bit-Kernel nicht unterstützt.
  2. Die Ausführung auf Hardware, die Speicherschlüssel und Benutzerschlüssel unterstützt, wurde nicht explizit inaktiviert. Benutzerschlüssel sind standardmäßig aktiviert, wenn sie von der Plattform unterstützt werden. Die Unterroutine sysconf (_SC_AIX_UKEYS) gibt die Anzahl der verfügbaren User-Keys zurück.
  3. Bei Multithread-Prozessen muss der Prozess im Systembereich ausgeführt werden, z. B. im 1:1-Modus.
  4. Prozess ist nicht checkpoint-fähig für Load Leveler dispatched Jobs.

Alle Threads eines Prozesses mit aktivem Benutzerschlüssel werden anfangs mit einem aktiven Benutzerschlüssel-Set eingerichtet, das nur Lese- und Schreibzugriff auf Speicherseiten erlaubt, die dem Standard-Benutzerschlüssel UKEY_PUBLIC zugewiesen wurden. Einzelne Threads können ihren aktiven Benutzerschlüsselsatz ändern, indem sie Benutzerschlüssel-APIs aufrufen, um Benutzerschlüsselsätze zu erstellen und aktivieren.

Signalkontext für User-Key-aktivierte Prozesse:

Der Standardsignalkontext für einen für Benutzerschlüssel aktivierten Prozess wird für alle zukünftigen empfangenen Signale geändert. Die Struktur ucontext_t wird um den aktiven User-Key-Satz des unterbrochenen Threads erweitert. Dies wird für Signalhandler bereitgestellt.

Hinweis: Obwohl Signalhandler einen Zeiger auf die sigcontext_t gemäß der Dokumentation für das Unterprogramm sigaction verwenden, ist die tatsächliche Struktur, die auf dem Stack aufgebaut wird, die ucontext_t-Struktur, die eine Obermenge der sigcontext_t ist und in ihrem Anfangsteil mit ihr übereinstimmt. Durch Zeigen auf den Signalkontext mit einem ucontext_t-Zeiger können Signalhandler auf die erweiterten Daten zugreifen.

Die folgenden Felder sind festgelegt:

ucontext_t.__extctx.__flags |= __EXTCTX_UKEYS 	 
ucontext_t.__extctx.__ukeys[2] = active user-key-set

Der erweiterte Benutzerschlüsselkontext ist vom VMX-Kontext unabhängig und wurde für alle Prozesse erstellt, die für Benutzerschlüssel aktiviert sind.

Wenn eine Speicherschlüsselausnahme vorliegt, wird das Feld Ausnahmetyp gesetzt, um dies im erweiterten Kontext anzuzeigen:

ucontext_t.uc_mcontext.jmp_context.excp_type = EXCEPT_SKEY.

In der Header-Datei sys/context.h finden Sie ein detailliertes Layout der erweiterten Kontextinformationen.

Rückgabewerte

Bei Erfolg gibt das Unterprogramm ukey_enable die Anzahl der verfügbaren Benutzerschlüssel zurück. Andernfalls gibt es den Wert -1 zurück und setzt die globale Variable errno, um den Fehler anzuzeigen.

Fehlercodes

Element Beschreibung
ENOSYS Benutzerschlüssel werden nicht unterstützt.

Zugehörige Informationen

Die Unterroutine ukey_setjmp.

Die Unterroutine ukeyset_init.

Die Unterroutine ukeyset_add_key, ukeyset_remove_key, ukeyset_add_set, ukeyset_remove_set.

Die Unterroutine ukeyset_activate.

Die Unterroutine ukeyset_ismember.

Die Unterroutine pthread_attr_getukeyset_np oder pthread_attr_setukeyset_np.

AIX® Vektorielle Programmierung inAllgemeine Programmierkonzepte: Programme schreiben und debuggen.