Difference between revisions of "System unit structure/fr"

From Lazarus wiki
Jump to navigationJump to search
 
(9 intermediate revisions by one other user not shown)
Line 51: Line 51:
 
==== InitHeap ====
 
==== InitHeap ====
  
Implementé dans heap.inc.
+
Implémenté dans heap.inc.
  
Initialization of internal structures used by the default heap memory manager. No heap may be used before calling InitHeap.
+
Initialisation des structutres internes utilisées par le gestionnaire de tas par défault. Aucun tas ne peut être utilisé avant avoir appelé InitHeap.
  
 
==== SysInitExceptions ====
 
==== SysInitExceptions ====
  
Initialization of internal structures used by the exception support.
+
Initialisation des structures internes utilisées par le support des exceptions.
  
 
<TODO>
 
<TODO>
Line 63: Line 63:
 
==== OpenStdIO ====
 
==== OpenStdIO ====
  
Common part of initialization for standard file variables. It's similar to Assign and Reset/Rewrite calls for normal text files, but the files are associated with empty file names and no attempt is made to open the files (they're assumed to be already open).
+
Partie commune de l'initialisation des variables fichier standard. C'est similaire aux appels Assign et Reset/Rewrite pour les fichiers texte, mais ces fichiers sont associés à des noms de fichiers vides et aucune tentative n'est faite pour ouvrir les fichiers (ils sont censés être déjà ouverts).
  
 
<TODO>
 
<TODO>
Line 89: Line 89:
 
==== Sysinit unit and indirect entry information ====
 
==== Sysinit unit and indirect entry information ====
  
(note: This is currently at very initial stage and applies only to i386-win32 target)
+
(note: c'est actuellement en état de démarrage et s'applique seulement à la cible i386-win32)
  
Supporting runtime packages requires possibility to link the system unit and the main program into different executable modules. Therefore, global information generated by compiler, such as unit initialization table, cannot be directly referenced from the system unit. Instead, it is referenced from a separate small unit ('sysinit') and passed to routines in system unit via function arguments. The module entry point is placed in sysinit unit, too. A copy of sysinit unit is statically linked into every executable module, so every module ends up containing the initialization table only for the units it actually contains.
+
Supporter les paquets d'exécution nécessite de pouvoir relier l'unité System et le programme principal en différents modules exécutables. Par conséquent, l'information globale générée par compilateur, telle que la table d'initialisation de l'unité, ne peut pas être directement référencée à partir de l'unité System. Au lieu de cela, il est référencé à partir d'une petite unité distincte ('sysinit') et transmis à des routines dans l'unité du système via les arguments de fonction. Le point d'entrée du module est placé dans l'unité sysinit, aussi. Une copie de l'unité de sysinit est liée statiquement dans chaque module exécutable, de sorte que chaque module se termine en contenant la table d'initialisation seulement pour les unités qu'il contient réellement.
  
This global information is not limited to unit initialization table, see TEntryInformation record for complete list.
+
Cette information globale n'est pas limitée à la table d'initialisation de l'unité, voir l'enregistrement TEntryInformation pour une liste complète.
  
A target may have more than one sysinit unit, each solving specific initialization tasks. A particular unit to use is determined by compiler, see InitSysInitUnitName method in descendants of TLinker class. For example, while normally using sysinitpas.pp, complier will use sysinitcyg.pp instead if it detects linking with cygwin libraries.
+
Une cible peut avoir plus d'une unité Sysinit, chacune résolvant des tâches d'initialisation spécifiques. Une unité particulière à utiliser est déterminée par le compilateur, voir la méthode InitSysInitUnitName de la classe TLinker. Par exemple, bien qu'utilisant normalement sysinitpas.pp, le compilateur peut utiliser  sysinitcyg.pp à la place s'il détecte une liaison avec des bibbliothèques Cygwin.
  
 
=== Spécifique à une plate-forme ===
 
=== Spécifique à une plate-forme ===
Line 101: Line 101:
 
==== Initialisation de l'unité ====
 
==== Initialisation de l'unité ====
  
The following tasks are performed:
+
Les tâches suivantes sont réalisées:
* IsLibrary variable initialization (true if running in a shared library, false otherwise)
+
* Initialisation de la variable IsLibrary (true si elle s'exécute dans une bibliothèque partagée, false sinon)
* ProcessID and ThreadID variables initialization
+
* Initialisation des variables ProcessID et ThreadID
* IsConsole variable initialization (true if running in a text console, false if running in windowed GUI application)
+
* Initialisation de la variable IsConsole (true si elle x'exécute dans la console texte, false si elle s'exécute dans une application graphique fenêtrée)
* ExitProc variable initialization <TODO>
+
* Initialisation de la variable ExitProc <TODO>
* Heap initialization (calling shared InitHeap)
+
* Initialisation du tas (appelant le InitHeap partagé)
* Initialization of potential procedural variables and/or parameters needed to support System unit routines requiring different implementation depending on detected version of operating system (possibly including dynamic loading of procedures or functions from shared libraries where appropriate) - see [[OS aware RTL]]
+
* Initialisation de variables procédural potentielles et/ou des paramètres nécessaires au support des routines l'unité System requérant différentes implémentation selon le système d'exploitation (intégrant peut-être le chargement dynamique de procédures et fonctions depuis des bibliothèques partagées au besoin) - voir [[OS aware RTL]]
* InOutRes variable initialization (set to 0)
+
* Initialisation de la variable IniInOutRes (set to 0)
* Environment variables initialization (EnvC and EnvP), usually by calling InitEnvironment - only needed for platforms not providing access to these variables natively
+
* Initialisation des variables d'environment (EnvC and EnvP), habituellement par appel de InitEnvironment - seulement requis pour les plates-formes ne fournissant pas d'accès à ces variables nativement.
* Internal thread manager is initialized by calling InitSystemThreads
+
* Le gestionnaire interne de thread est initialisé par l'appel à InitSystemThreads
* Internal variant manager is initialized by calling InitVariantManager
+
* Le gestionnaire interne de variant est initialisé par l'appel à InitVariantManager
* Internal widestring manager is initialized by calling InitWideStringManager
+
* Le gestionnaire interne de widestring est initialisé par l'appel à InitWideStringManager
  
 
==== InitEnvironment ====
 
==== InitEnvironment ====
  
Only needed for platforms not providing access to EnvC and EnvP variables natively.
+
Seulement nécessaire pour les plates-formes ne fournissant pas un accès natif aux variables EnvC et EnvP (OS2, EMX p.ex.).
  
Procedure checks amount of environment variables and stores it in EnvC. Then memory for EnvP^ is allocated from heap (array of EnvC + 1 items of type PChar - the list pointer will point to nil). Finally the individual items in the array are initialized with PChars pointing to null terminated strings containing the environment variable name, equal sign and the environment variable value. Memory for the individual null terminated strings may be allocated from heap for these strings and they may be copied there if needed (i.e. if the particular platform doesn't provide pointer to a fixed location for these strings in required format).
+
La procédure contrôle la quantité des variables d'environnement et les enregistre dans EnvC. Ensuite, la mémoire est allouée sur le tas (tableau de EnvC+1 articles de type PChar - le pointeur de liste pointera vers Nil). Pour finir, les articles individuel du tableau sont initialisés avec des PChars pointant vers des chaînes à zéro terminal contenant le nom de la variable d'environnement, le signe égal et la valeur de la variable d'environnement. La mémoire pour les chaînes à zéro terminal individuelles peut être allouée sur le tas pour ces chaînes et peuvent être copiées là au besoin (i.e. si la plate-forme particulière ne fournit pas de pointeur vers un emplacement fixé pour ces chaînes dans le bon format).
  
 
==== InitArguments ====
 
==== InitArguments ====
  
Only needed for platforms not providing access to ArgC, ArgV and/or CmdLine variables natively.
+
Seulement nécessaire pour les plates-formes ne fournissant pas un accès natif aux variables ArgC, ArgV et/ou CmdLine.
  
 
<TODO>
 
<TODO>
Line 128: Line 128:
 
==== SysInitStdIO ====
 
==== SysInitStdIO ====
  
Initialization of standard file variables (Input, Output, ErrOutput, StdOut and StdErr).
+
Initialisation des variables de fichier standard (Input, Output, ErrOutput, StdOut et StdErr).
  
 
<TODO>
 
<TODO>
 
  
 
==== InitSystemThreads ====
 
==== InitSystemThreads ====
Line 180: Line 179:
 
== Routines publiques ==
 
== Routines publiques ==
  
The following routines are part of System unit interface and are supposed to be implemented fully in platform specific way. Their specification is available in FPC documentation, so they're listed here mostly for completeness sake to provide complete list for porting purposes.
+
Les routines suivantes font partie de l'interface de l'unité System et sont supposées être pleinement implémentées spécifiquement à chaque plate-forme. Leur spécification est disponible dans la documentation de FPC, donc elles sont listées ici principalement dans un souci de complétude pour fournir une liste complète à des fins de portage.
  
 
=== Manipulation de répertoire ===
 
=== Manipulation de répertoire ===
Line 194: Line 193:
  
 
* Randomize
 
* Randomize
* ParamCount, ParamStr (possibly to be moved to common - <TODO>)
+
* ParamCount, ParamStr (peut-être déplacé dans le commun - <TODO>)
 
 
  
 
== Finalization ==
 
== Finalization ==
Line 215: Line 213:
 
<TODO>
 
<TODO>
  
[[Category:RTL]]
+
[[Category:RTL/fr]]
[[Category:FPC internals]]
+
[[Category:FPC internals/fr]]

Latest revision as of 22:25, 17 July 2015

An editor has declared this article to be a stub, meaning that it needs more information. Can you help out and add some? If you have some useful information, you can help the Free Pascal Wiki by clicking on the edit box on the left and expanding this page.

English (en) español (es) français (fr)

Structure de l'unité System

(travail en cours - incomplet!)

Cette page est censée documenter les fonctions et procédures servant comme "interfaces" entre les parties communes et celles spécifique à une plate-forme de l'unité System aussi bien que les sous-routines utilisée communément pour des tâches particulières réalisées pendant l'initialisation et spécifie leur comportement. Cela pourrait alors servir de spécification pour les mainteneurs des plate-formes existantes ou à venir pour garantir un comportement totalement compatible (en prenant en compte autant que possible les limitations individuelles des plate-formes).

Toutes les routines listées sont obligatoires (au moins comme stub) sauf indication contraire. Si le nom du fichier source habituel contenant l'implémentation d'une routine particulière n'est pas mentionné, il est supposé être system.pas pour le code spécifique à une plate-forme et system.inc pour les routines partagées entre les plate-formes.

Types

Les types suivants sont supposés définis dans l'interface de la partie spécifique plate-forme de l'unité System.

  • THandle
  • TThreadID
  • TRTLCriticalSection
  • PRTLCriticalSection

Constantes et variables

La liste suivante énumère les constantes et variables qui doivent être déclarées (et habituellement initialisées à une valeur raisonnable pour la plate-forme particulière) pour toutes les plates-formes:

  • LineEnding
  • DirectorySeparator
  • DriveSeparator
  • PathSeparator
  • MaxExitCode
  • MaxPathLen
  • UnusedHandle
  • StdInputHandle
  • StdOutputHandle
  • StdErrorHandle
  • LFNSupport
  • FileNameCaseSensitive
  • CtrlZMarksEof
  • sLineBreak
  • DefaultTextLineBreakStyle
  • ArgC
  • ArgV
  • EnvC
  • EnvP


<TODO>

Initialization

Partagé

InitHeap

Implémenté dans heap.inc.

Initialisation des structutres internes utilisées par le gestionnaire de tas par défault. Aucun tas ne peut être utilisé avant avoir appelé InitHeap.

SysInitExceptions

Initialisation des structures internes utilisées par le support des exceptions.

<TODO>

OpenStdIO

Partie commune de l'initialisation des variables fichier standard. C'est similaire aux appels Assign et Reset/Rewrite pour les fichiers texte, mais ces fichiers sont associés à des noms de fichiers vides et aucune tentative n'est faite pour ouvrir les fichiers (ils sont censés être déjà ouverts).

<TODO>

InitSystemThreads

<TODO>

SetThreadManager

<TODO>

InitHeapMutexes

<TODO>

InitVariantManager

<TODO>

InitWideStringManager

<TODO>

Sysinit unit and indirect entry information

(note: c'est actuellement en état de démarrage et s'applique seulement à la cible i386-win32)

Supporter les paquets d'exécution nécessite de pouvoir relier l'unité System et le programme principal en différents modules exécutables. Par conséquent, l'information globale générée par compilateur, telle que la table d'initialisation de l'unité, ne peut pas être directement référencée à partir de l'unité System. Au lieu de cela, il est référencé à partir d'une petite unité distincte ('sysinit') et transmis à des routines dans l'unité du système via les arguments de fonction. Le point d'entrée du module est placé dans l'unité sysinit, aussi. Une copie de l'unité de sysinit est liée statiquement dans chaque module exécutable, de sorte que chaque module se termine en contenant la table d'initialisation seulement pour les unités qu'il contient réellement.

Cette information globale n'est pas limitée à la table d'initialisation de l'unité, voir l'enregistrement TEntryInformation pour une liste complète.

Une cible peut avoir plus d'une unité Sysinit, chacune résolvant des tâches d'initialisation spécifiques. Une unité particulière à utiliser est déterminée par le compilateur, voir la méthode InitSysInitUnitName de la classe TLinker. Par exemple, bien qu'utilisant normalement sysinitpas.pp, le compilateur peut utiliser sysinitcyg.pp à la place s'il détecte une liaison avec des bibbliothèques Cygwin.

Spécifique à une plate-forme

Initialisation de l'unité

Les tâches suivantes sont réalisées:

  • Initialisation de la variable IsLibrary (true si elle s'exécute dans une bibliothèque partagée, false sinon)
  • Initialisation des variables ProcessID et ThreadID
  • Initialisation de la variable IsConsole (true si elle x'exécute dans la console texte, false si elle s'exécute dans une application graphique fenêtrée)
  • Initialisation de la variable ExitProc <TODO>
  • Initialisation du tas (appelant le InitHeap partagé)
  • Initialisation de variables procédural potentielles et/ou des paramètres nécessaires au support des routines l'unité System requérant différentes implémentation selon le système d'exploitation (intégrant peut-être le chargement dynamique de procédures et fonctions depuis des bibliothèques partagées au besoin) - voir OS aware RTL
  • Initialisation de la variable IniInOutRes (set to 0)
  • Initialisation des variables d'environment (EnvC and EnvP), habituellement par appel de InitEnvironment - seulement requis pour les plates-formes ne fournissant pas d'accès à ces variables nativement.
  • Le gestionnaire interne de thread est initialisé par l'appel à InitSystemThreads
  • Le gestionnaire interne de variant est initialisé par l'appel à InitVariantManager
  • Le gestionnaire interne de widestring est initialisé par l'appel à InitWideStringManager

InitEnvironment

Seulement nécessaire pour les plates-formes ne fournissant pas un accès natif aux variables EnvC et EnvP (OS2, EMX p.ex.).

La procédure contrôle la quantité des variables d'environnement et les enregistre dans EnvC. Ensuite, la mémoire est allouée sur le tas (tableau de EnvC+1 articles de type PChar - le pointeur de liste pointera vers Nil). Pour finir, les articles individuel du tableau sont initialisés avec des PChars pointant vers des chaînes à zéro terminal contenant le nom de la variable d'environnement, le signe égal et la valeur de la variable d'environnement. La mémoire pour les chaînes à zéro terminal individuelles peut être allouée sur le tas pour ces chaînes et peuvent être copiées là au besoin (i.e. si la plate-forme particulière ne fournit pas de pointeur vers un emplacement fixé pour ces chaînes dans le bon format).

InitArguments

Seulement nécessaire pour les plates-formes ne fournissant pas un accès natif aux variables ArgC, ArgV et/ou CmdLine.

<TODO>

SysInitStdIO

Initialisation des variables de fichier standard (Input, Output, ErrOutput, StdOut et StdErr).

<TODO>

InitSystemThreads

<TODO>

Tâches générales

Platform specific

Manipulation de fichier

Habituellement implémenté dans sysfile.inc.

Do_Close
Do_Erase
Do_Rename
Do_Read
Do_Write
Do_FilePos
Do_Seek
Do_SeekEnd
Do_FileSize
Do_Truncate
Do_Open
Do_IsDevice

Gestion du tas

SysOSAlloc
SysOSFree

Support du Threading

SysInitThreadVar
SysRelocateThreadVar

Autre

System_Exit

Routines publiques

Les routines suivantes font partie de l'interface de l'unité System et sont supposées être pleinement implémentées spécifiquement à chaque plate-forme. Leur spécification est disponible dans la documentation de FPC, donc elles sont listées ici principalement dans un souci de complétude pour fournir une liste complète à des fins de portage.

Manipulation de répertoire

Habituellement implémenté dans sysdir.inc.

  • MkDir
  • RmDir
  • ChDir
  • GetDir

Autres

  • Randomize
  • ParamCount, ParamStr (peut-être déplacé dans le commun - <TODO>)

Finalization

Partagés

InternalExit

<TODO>

FinalizeHeap

<TODO>

Platform specific

FinalDeallocation

<TODO>