Compare commits
No commits in common. "c0166072c15e5660cb2ca82a76cdd2233f3a9b08" and "89ef1a3297e79e62c5b56974e8c32ea8e0266aa1" have entirely different histories.
c0166072c1
...
89ef1a3297
5 changed files with 5 additions and 652 deletions
16
config.toml
16
config.toml
|
@ -1,29 +1,21 @@
|
|||
baseURL = "https://lpro.epha.se"
|
||||
languageCode = "fr"
|
||||
defaultContentLanguage = "fr"
|
||||
title = "Note de cours et TD"
|
||||
title = "Licence pro ADSILLH - Cours et TD"
|
||||
pygmentsCodeFences = true
|
||||
pygmentsUseClasses = false
|
||||
theme = "mainroad"
|
||||
rssLimit = 10
|
||||
paginate = 10
|
||||
enableRobotsTXT = false
|
||||
|
||||
[Author] # Used in authorbox
|
||||
name = "ephase"
|
||||
bio = "Adminstrateur système, j'ai d'abord intégré la Licence Pro ADSILLH et mainrenant le Master IDI à l'Université de Bodreaux"
|
||||
avatar = "assets/images/souris.svg"
|
||||
|
||||
enableRobotsTXT = true
|
||||
[taxonomies]
|
||||
category = "categories"
|
||||
category = "categories"
|
||||
tag = "tags"
|
||||
|
||||
[Params]
|
||||
description = "Licence ADSILLH et Master IDI, mes notes de cours et de TD"
|
||||
toc = true
|
||||
post_navigation = true
|
||||
mainSections = ["reseau", "progsys", "installations", "bdd", "securite", "systemes_exploitation"]
|
||||
post_meta = ["author", "date", "categories", "translations"]
|
||||
postSections = ["reseau", "progsys", "installations", "bdd", "securite"]
|
||||
|
||||
[Params.sidebar]
|
||||
home = "right" # Configure layout for home page
|
||||
|
|
|
@ -1,340 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="128"
|
||||
height="128"
|
||||
viewBox="3.025 -0.229 169 237"
|
||||
xml:space="preserve"
|
||||
id="svg3959"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.2 r9819"
|
||||
sodipodi:docname="souris.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.0"
|
||||
inkscape:export-filename="/home/ephase/Images/Ressources/icones/souris.png"
|
||||
inkscape:export-xdpi="45"
|
||||
inkscape:export-ydpi="45"><metadata
|
||||
id="metadata4028"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
|
||||
inkscape:window-height="749"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.28857909"
|
||||
inkscape:cx="3128.468"
|
||||
inkscape:cy="-1115.1709"
|
||||
inkscape:window-x="-1"
|
||||
inkscape:window-y="26"
|
||||
inkscape:current-layer="svg3959"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:snap-global="false" />
|
||||
<defs
|
||||
id="defs3961"><linearGradient
|
||||
id="linearGradient13265"><stop
|
||||
style="stop-color:#980000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop13267" /><stop
|
||||
style="stop-color:#ff1010;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop13269" /></linearGradient><linearGradient
|
||||
id="linearGradient13232"><stop
|
||||
style="stop-color:#141478;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop13234" /><stop
|
||||
style="stop-color:#6060e5;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop13236" /></linearGradient><inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 118.5 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="169 : 118.5 : 1"
|
||||
inkscape:persp3d-origin="84.5 : 79 : 1"
|
||||
id="perspective4030" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13232"
|
||||
id="linearGradient13246"
|
||||
x1="1766.8267"
|
||||
y1="833.69983"
|
||||
x2="1707.1578"
|
||||
y2="834.82715"
|
||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13232"
|
||||
id="linearGradient13259"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.54008439,0,0,0.54008439,16.729114,0.12367932)"
|
||||
x1="3457.6523"
|
||||
y1="1294.3481"
|
||||
x2="3256.5974"
|
||||
y2="1574.1963" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13232"
|
||||
id="linearGradient13263"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="1754.8358"
|
||||
y1="833.46924"
|
||||
x2="1732.7538"
|
||||
y2="833.90479" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13265"
|
||||
id="linearGradient13279"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1,0,0,-1,7025.4374,2738.9717)"
|
||||
x1="3457.6523"
|
||||
y1="1294.3481"
|
||||
x2="3221.5789"
|
||||
y2="1625.6942" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13265"
|
||||
id="linearGradient13281"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="1766.8267"
|
||||
y1="833.69983"
|
||||
x2="1707.1578"
|
||||
y2="834.82715" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13265"
|
||||
id="linearGradient13283"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="1754.8358"
|
||||
y1="833.46924"
|
||||
x2="1732.7538"
|
||||
y2="833.90479" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13232"
|
||||
id="linearGradient13294"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.54008439,0,0,0.54008439,16.729114,0.12367932)"
|
||||
x1="3457.6523"
|
||||
y1="1294.3481"
|
||||
x2="3256.5974"
|
||||
y2="1574.1963" /><linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13232"
|
||||
id="linearGradient13297"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.6533027,0,0,1.6533027,-1542.0062,-762.90463)"
|
||||
x1="3457.6523"
|
||||
y1="1294.3481"
|
||||
x2="3256.5974"
|
||||
y2="1574.1963" /><radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient13265"
|
||||
id="radialGradient13306"
|
||||
cx="2325.457"
|
||||
cy="866.42877"
|
||||
fx="2325.457"
|
||||
fy="866.42877"
|
||||
r="183.0407"
|
||||
gradientTransform="matrix(1,0,0,1.3068621,0,-265.87415)"
|
||||
gradientUnits="userSpaceOnUse" /></defs>
|
||||
<g
|
||||
id="g3963"
|
||||
transform="matrix(0.9204126,0,0,0.9204126,7.2696233,9.3176187)">
|
||||
<g
|
||||
id="g3965">
|
||||
<defs
|
||||
id="defs3967">
|
||||
<rect
|
||||
id="XMLID_3_"
|
||||
y="45.909"
|
||||
width="174.39"
|
||||
height="194.13"
|
||||
x="0" />
|
||||
</defs>
|
||||
<clipPath
|
||||
id="XMLID_2_">
|
||||
<use
|
||||
xlink:href="#XMLID_3_"
|
||||
id="use3971"
|
||||
x="0"
|
||||
y="0"
|
||||
width="169"
|
||||
height="237" />
|
||||
</clipPath>
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="151.357,88.684 141.486,88.684 141.486,98.555 131.615,98.555 131.615,108.426 141.486,108.426 141.486,118.297 151.357,118.297 151.357,88.684 "
|
||||
id="polyline3973"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="141.486,88.684 141.486,78.812 111.873,78.812 111.873,68.941 102.001,68.941 102.001,78.812 72.388,78.812 72.388,68.941 62.517,68.941 62.517,78.812 32.904,78.812 32.904,88.684 141.486,88.684 "
|
||||
id="polyline3975"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="131.615,98.555 141.486,98.555 141.486,88.684 32.904,88.684 32.904,98.555 42.775,98.555 42.775,108.426 52.646,108.426 52.646,98.555 82.259,98.555 82.259,108.426 92.13,108.426 92.13,98.555 121.744,98.555 121.744,108.426 131.615,108.426 131.615,98.555 "
|
||||
id="polyline3977"
|
||||
style="fill:#f1e9d9;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="141.486,108.426 131.615,108.426 131.615,118.297 121.744,118.297 121.744,138.039 131.615,138.039 131.615,197.265 141.486,197.265 141.486,207.136 151.357,207.136 151.357,217.007 161.228,217.007 161.228,177.522 151.357,177.522 151.357,118.297 141.486,118.297 141.486,108.426 "
|
||||
id="polyline3979"
|
||||
style="fill:#d5cfc2;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="131.615,118.297 131.615,108.426 121.744,108.426 121.744,98.555 92.13,98.555 92.13,108.426 102.001,108.426 111.873,108.426 111.873,128.168 102.001,128.168 102.001,108.426 92.13,108.426 82.259,108.426 82.259,98.555 52.646,98.555 52.646,108.426 62.517,108.426 72.388,108.426 72.388,128.168 62.517,128.168 62.517,108.426 52.646,108.426 42.775,108.426 42.775,118.297 52.646,118.297 52.646,138.039 82.259,138.039 82.259,118.297 92.13,118.297 92.13,138.039 121.744,138.039 121.744,118.297 131.615,118.297 "
|
||||
id="polyline3981"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="62.517,108.426 62.517,128.168 72.388,128.168 72.388,108.426 62.517,108.426 "
|
||||
id="polyline3983"
|
||||
style="fill:#84817d;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="111.873,108.426 102.001,108.426 102.001,128.168 111.873,128.168 111.873,108.426 "
|
||||
id="polyline3985"
|
||||
style="fill:#84817d;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="161.228,118.297 151.357,118.297 151.357,177.522 161.228,177.522 161.228,118.297 "
|
||||
id="polyline3987"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="131.615,197.265 131.615,138.039 121.744,138.039 121.744,197.265 52.646,197.265 52.646,138.039 42.775,138.039 42.775,197.265 32.904,197.265 32.904,207.136 141.486,207.136 141.486,197.265 131.615,197.265 "
|
||||
id="polyline3989"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="171.099,177.522 161.228,177.522 161.228,217.007 151.357,217.007 151.357,226.878 23.033,226.878 23.033,217.007 13.162,217.007 13.162,177.522 3.291,177.522 3.291,236.749 171.099,236.749 171.099,177.522 "
|
||||
id="polyline3991"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="151.357,207.136 141.486,207.136 141.486,217.007 151.357,217.007 151.357,207.136 "
|
||||
id="polyline3993"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="102.001,78.812 102.001,68.941 92.13,68.941 92.13,59.07 82.259,59.07 82.259,68.941 72.388,68.941 72.388,78.812 102.001,78.812 "
|
||||
id="polyline3995"
|
||||
style="fill:#b0aea9;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="102.001,59.07 92.13,59.07 92.13,68.941 102.001,68.941 102.001,59.07 "
|
||||
id="polyline3997"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="92.13,59.07 92.13,49.199 82.259,49.199 82.259,59.07 92.13,59.07 "
|
||||
id="polyline3999"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="82.259,59.07 72.388,59.07 72.388,68.941 82.259,68.941 82.259,59.07 "
|
||||
id="polyline4001"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="92.13,118.297 82.259,118.297 82.259,138.039 52.646,138.039 52.646,197.265 121.744,197.265 121.744,138.039 92.13,138.039 92.13,118.297 "
|
||||
id="polyline4003"
|
||||
style="fill:#f1e9d9;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="23.033,118.297 13.162,118.297 13.162,177.522 23.033,177.522 23.033,118.297 "
|
||||
id="polyline4005"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="32.904,118.297 32.904,108.426 42.775,108.426 42.775,98.555 32.904,98.555 32.904,88.684 23.033,88.684 23.033,118.297 32.904,118.297 "
|
||||
id="polyline4007"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="32.904,108.426 32.904,118.297 23.033,118.297 23.033,177.522 13.162,177.522 13.162,217.007 23.033,217.007 23.033,207.136 32.904,207.136 32.904,197.265 42.775,197.265 42.775,138.039 52.646,138.039 52.646,118.297 42.775,118.297 42.775,108.426 32.904,108.426 "
|
||||
id="polyline4009"
|
||||
style="fill:#f1e9d9;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="32.904,207.136 23.033,207.136 23.033,217.007 32.904,217.007 32.904,207.136 "
|
||||
id="polyline4011"
|
||||
style="fill:#030200;fill-rule:evenodd" />
|
||||
<polyline
|
||||
clip-path="url(#XMLID_2_)"
|
||||
clip-rule="evenodd"
|
||||
points="32.904,217.007 23.033,217.007 23.033,226.878 151.357,226.878 151.357,217.007 141.486,217.007 141.486,207.136 32.904,207.136 32.904,217.007 "
|
||||
id="polyline4013"
|
||||
style="fill:#d5cfc2;fill-rule:evenodd" />
|
||||
</g>
|
||||
<rect
|
||||
x="82.286003"
|
||||
y="39.331001"
|
||||
width="9.8800001"
|
||||
height="9.8800001"
|
||||
id="rect4015" />
|
||||
<rect
|
||||
x="82.319"
|
||||
y="29.487"
|
||||
width="9.8800001"
|
||||
height="9.8800001"
|
||||
id="rect4017" />
|
||||
<rect
|
||||
x="92.184998"
|
||||
y="19.643"
|
||||
width="9.8809996"
|
||||
height="9.8800001"
|
||||
id="rect4019" />
|
||||
<rect
|
||||
x="102.226"
|
||||
y="9.8959999"
|
||||
width="9.8800001"
|
||||
height="9.8800001"
|
||||
id="rect4021" />
|
||||
<rect
|
||||
x="112.076"
|
||||
width="9.8800001"
|
||||
height="9.8800001"
|
||||
id="rect4023"
|
||||
y="0" />
|
||||
<rect
|
||||
x="121.951"
|
||||
width="9.8789997"
|
||||
height="9.8800001"
|
||||
id="rect4025"
|
||||
y="0" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 12 KiB |
|
@ -1,100 +0,0 @@
|
|||
---
|
||||
title: "Systèmes d'exploitation : Introduction"
|
||||
date: 2021-09-10
|
||||
tags: ["système", "appels système", "interruption"]
|
||||
categories: ["Systèmes d'exploitation", "Cours"]
|
||||
---
|
||||
|
||||
## Qu'est ce que c'est?
|
||||
|
||||
D'après
|
||||
[Wikipedia](https://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation), "un
|
||||
système d'exploitation est est un ensemble de programmes qui dirige
|
||||
l'utilisation des ressources d'un ordinateur par des logiciels applicatifs."
|
||||
|
||||
Il permet l'abstraction matérielle *(via les pilotes de périphériques)*, la
|
||||
gestion des processus *(et leur séparation, permettant à un processus défectueux
|
||||
de ne pas impacter les autres)*, la gestion fine des ressources...
|
||||
|
||||
Le systèmes d'exploitation prend en charge la gestion du processeur, de la
|
||||
mémoire, des accès disques, de la pile réseau, les services et souvent aussi
|
||||
l'interface graphique. Il peut-être *(rarement)* mono-utilisateur ou
|
||||
multi-utilisateur.
|
||||
|
||||
Il est donc important de ne pas confondre **Noyau** et système d'exploitation,
|
||||
le premier étant une partie du second.
|
||||
|
||||
## Les interruptions
|
||||
|
||||
D'après [Wikipedia](https://fr.wikipedia.org/wiki/Interruption_(informatique)),
|
||||
"une interruption est une suspension temporaire de l'exécution d'un programme
|
||||
informatique par le microprocesseur afin d'exécuter un programme prioritaire
|
||||
(appelé service d'interruption)."
|
||||
|
||||
|
||||
Les interruptions peuvent être envoyées par les périphériques ou le CPU
|
||||
lui-même. Lors de l'envoi d'une interruption, aucun message n'est envoyé,
|
||||
seulement son numéro, le CPU fait alors un saut vers une routine définie par
|
||||
**la table d'interruption**. Cette table est mise en place par le *noyau* en
|
||||
RAM. Cette table contient une entrée par interruption.
|
||||
|
||||
Il existe deux grand type
|
||||
d'interruption:
|
||||
|
||||
* Celle basées sur le matériel
|
||||
* Celle basée sur le temps (horloge)
|
||||
|
||||
La routine propre à l'interruption appellen ensuite une *iret* afin de reprendre
|
||||
l'exécution précédente.
|
||||
|
||||
sous certaines conditions, certaines interruptions sont "masquable" *(mais elle
|
||||
ne peuvent pas être ignorées)*.
|
||||
|
||||
### Le cas du timer
|
||||
|
||||
C'est une interruption déclenchée à intervalle régulier, en général toutes les
|
||||
10ms. Ainsi un processus ne peut pas monopoliser indéfiniment le CPU. Ainsi le
|
||||
noyau peut stopper, voire tuer un processus trop gourmand.
|
||||
|
||||
## Les privilèges
|
||||
|
||||
Nous avons besoin de contrôler ce que font les processus, seult le noyau doit
|
||||
être tout-puissant. Le contrôle des instructions autorisée ou non ne peut se
|
||||
faire **qu'au niveau du matériel** et donc du CPU.
|
||||
|
||||
Ainsi ce dernier disponse de deux modes de fonctionnement:
|
||||
|
||||
* **protégé**: seul un nombre restreint d'instruction sont disponibles
|
||||
* **réel** (ou noyau) toutes les instructions sont disponibles.
|
||||
|
||||
Si une instruction privilégiée est exécutées par un processus, une exception
|
||||
(sorte d'interruption) est lancée.
|
||||
|
||||
Pour des questions de sécurité, un processus ne doit pas pouvoir exécuter des
|
||||
instructions privilegiées. En effet le rôle du noyau ets aussi de faire
|
||||
abstraction du matériel, lui seul y a accès. Cependant certains processus ont
|
||||
besoin d'y accéder **un affichage** avec `printf` ou la **saisie d'un texte au
|
||||
clavier** ou encore **créer un processus**.
|
||||
|
||||
### Les appels systèmes
|
||||
|
||||
Pour celà le noyau dispose d'un mécanisme : **les appels systèmes**. ainsi le
|
||||
noyau contient des routines pouvant être utiles aux processus. Ces routines sont
|
||||
appelés par des interruptions logicielles. Le processus positionne le numéro de
|
||||
l'appel un registre (`%eax` sur les processeurs Intel) et lance l'interruption.
|
||||
|
||||
Côté noyau, une table contenant la liste des appels systèmes est positionnée en
|
||||
RAM.
|
||||
|
||||
L'utilisation des appels systèmes est sécurisée : les processus ne joue pas avec
|
||||
des adresse mémoires contenant des routines, mais ne connaissent seulement son
|
||||
numéro. Les paramètres necessaires aux appels sont eux stockés sur la pile.
|
||||
|
||||
### Dans les systèmes modernes.
|
||||
|
||||
Ils sont nombreux : on en compte environ 330 dans Linux et plus de 500 dans
|
||||
MacOSX.
|
||||
|
||||
Sour Linux, certaines routines sont inclues dans la `libc` et ne sont donc pas
|
||||
des appels système. Par exemple `printf` qui affiche des éléments à l'écran et
|
||||
inclu dans la `libc` utilise l'appel système `write`.
|
|
@ -1,199 +0,0 @@
|
|||
---
|
||||
title: "Systèmes d'exploitation : Les processus"
|
||||
date: 2021-09-17
|
||||
tags: ["système", "appels système", "processus"]
|
||||
categories: ["Systèmes d'exploitation", "Cours"]
|
||||
---
|
||||
|
||||
Les processus sont des instances vivants de programmes. Un programme représente
|
||||
du code binaire stocké sur un support de stockage.
|
||||
|
||||
Un processus est un espace d'adressage en mémoire et d'un contexte d'exécution.
|
||||
Plus d'information est disponible [dans les cours de prog. système]({{< ref
|
||||
"../../progsys/3-processus/index.md">}} "Les processus")
|
||||
|
||||
## Accès à la mémoire
|
||||
|
||||
L'espace d'adressage contient des segments mémoire :
|
||||
|
||||
* le *segment de texte* / de code: les instructions optimisées par le
|
||||
compilateur, souvent en lecture seule dans les systèmes modernes.
|
||||
* le *segment data* contenant lui même le segment des *données initialisées* et
|
||||
le BSS (données non-initialisées)
|
||||
* le *tas*, zone de mémoire dynamique gérée par la `libc` par l'utilisation de
|
||||
`malloc()` et `free()`. Le système ne peut détecter un accès en dehors de
|
||||
la plage définie par un `malloc()`. Lorsque le tas n'a plus d'espace alors
|
||||
la `libc` effectue un appel système (mais le noyau peut refuser d'allouer)
|
||||
* la *pile d'exécution*, sa taille est de 8MiB maximum sous Linux. Ce segment
|
||||
contient les paramètres des fonctions et leurs variables locales.
|
||||
* les *librairies partagées* mappees à la demande.
|
||||
|
||||
|
||||
Il est possible de voir les espaces de mémoire alloués pour un processus donné :
|
||||
|
||||
```
|
||||
cat /proc/self/maps
|
||||
55fee9705000-55fee9707000 r--p 00000000 fe:01 1979024 /usr/bin/cat
|
||||
55fee9707000-55fee970c000 r-xp 00002000 fe:01 1979024 /usr/bin/cat
|
||||
55fee970c000-55fee970f000 r--p 00007000 fe:01 1979024 /usr/bin/cat
|
||||
55fee970f000-55fee9710000 r--p 00009000 fe:01 1979024 /usr/bin/cat
|
||||
55fee9710000-55fee9711000 rw-p 0000a000 fe:01 1979024 /usr/bin/cat
|
||||
55feead5a000-55feead7b000 rw-p 00000000 00:00 0 [heap]
|
||||
7fbcfa322000-7fbcfa344000 rw-p 00000000 00:00 0
|
||||
7fbcfa344000-7fbcfa62c000 r--p 00000000 fe:01 1987533 /usr/lib/locale/locale-archive
|
||||
7fbcfa62c000-7fbcfa62e000 rw-p 00000000 00:00 0
|
||||
7fbcfa62e000-7fbcfa654000 r--p 00000000 fe:01 1969528 /usr/lib/libc-2.33.so
|
||||
7fbcfa654000-7fbcfa79f000 r-xp 00026000 fe:01 1969528 /usr/lib/libc-2.33.so
|
||||
7fbcfa79f000-7fbcfa7eb000 r--p 00171000 fe:01 1969528 /usr/lib/libc-2.33.so
|
||||
7fbcfa7eb000-7fbcfa7ee000 r--p 001bc000 fe:01 1969528 /usr/lib/libc-2.33.so
|
||||
7fbcfa7ee000-7fbcfa7f1000 rw-p 001bf000 fe:01 1969528 /usr/lib/libc-2.33.so
|
||||
7fbcfa7f1000-7fbcfa7fc000 rw-p 00000000 00:00 0
|
||||
7fbcfa80f000-7fbcfa810000 r--p 00000000 fe:01 1969517 /usr/lib/ld-2.33.so
|
||||
7fbcfa810000-7fbcfa834000 r-xp 00001000 fe:01 1969517 /usr/lib/ld-2.33.so
|
||||
7fbcfa834000-7fbcfa83d000 r--p 00025000 fe:01 1969517 /usr/lib/ld-2.33.so
|
||||
7fbcfa83d000-7fbcfa83f000 r--p 0002d000 fe:01 1969517 /usr/lib/ld-2.33.so
|
||||
7fbcfa83f000-7fbcfa841000 rw-p 0002f000 fe:01 1969517 /usr/lib/ld-2.33.so
|
||||
7ffccf574000-7ffccf595000 rw-p 00000000 00:00 0 [stack]
|
||||
7ffccf5c8000-7ffccf5cc000 r--p 00000000 00:00 0 [vvar]
|
||||
7ffccf5cc000-7ffccf5ce000 r-xp 00000000 00:00 0 [vdso]
|
||||
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
|
||||
```
|
||||
|
||||
On y voit biens les adresses de début, ceux de fin, les droits (`r`ead,
|
||||
`w`rite, e`x`ecute, `p`rivate)
|
||||
|
||||
L'accès par un processus à un espace mémoire invalide donne lieu à la fameuse
|
||||
`segmentation fault`. Mais il est tout à fait possible de lire et écrire vers
|
||||
une zone non allouée du tas. Par exemple j'initialise un tableau de 10 éléments
|
||||
et les rmpli avec une boule de 15 itérations.
|
||||
|
||||
## Attributs d'un processus
|
||||
|
||||
en plus de l'espace mémoire alloué pour le processus, le noyau stocke en mémoire
|
||||
un ensemble d'attributs : son identitiants (`PID`), sa priorité, l'`UID`
|
||||
(réel/effectif), la table des descripteurs de fichiers, la table des signaux, un
|
||||
espace pour sauvegarder les registres (changement de contexte, reprise sur
|
||||
interruption).
|
||||
|
||||
## Création et vie des processus
|
||||
|
||||
Un processus voulant en créer un autre doit faire un appel système `fork`. Lors
|
||||
du changement de contexte, les registres du processus `p0` sont sauvegardés puis
|
||||
remplacés par ceux de `p1`.
|
||||
|
||||
Les signaux sont délivrés au processus lors du passage du noyau à l'exécution.
|
||||
|
||||
### Processus bloquants
|
||||
|
||||
Lorsqu'un processus attends un appel bloquant (par exemple `read()`) il est muse
|
||||
en sommeil. Lorque l'interruption est lancée, alors le noyau réveille le
|
||||
processus.
|
||||
|
||||
## Ordonnancement
|
||||
|
||||
L'ordonnancement essaye définir un **fonctionnement universel** visant à
|
||||
organiser l'exécution concurente de processus sur un CPU. Un fonctionnement
|
||||
universel, convenant donc à tous les usages, *est impossible à obtenir*. Il
|
||||
dépend en effet de l'utilisation qui en est fait : interactif, temps-réel etc.
|
||||
|
||||
Dans le cadre d'un système interactif, la réactivité est la caractéristique la
|
||||
plus importante.
|
||||
|
||||
### Stratégie
|
||||
|
||||
Le type de système influe donc sur la stratégie à adopter. nous allons en
|
||||
détailler certaines.
|
||||
|
||||
#### FIFO - First In First Out
|
||||
|
||||
Une liste chainée de processus, on exécute le premier jusquà la fin de son
|
||||
exécution ou qu'il soit bloqué puis le second et ainsi de suite.
|
||||
|
||||
C'est une technique facile à implémenter, il est très peu couteux en temps
|
||||
processeur (le noyau intervient peu, peu de changement de contexte) mais
|
||||
comporte un gand risque de **famine** : un processus en boucle ne rendrai jamais
|
||||
la main.
|
||||
|
||||
#### Round-Robin
|
||||
|
||||
Un **temporisateur** valable pour tous: le changent de contexte intervient toute
|
||||
les 10ms par exemple. C'est une technique facile à implementer, il y a plus de
|
||||
famine mais on ne **gère pas de priorité**. S'il y a beaucoup de processus,
|
||||
alors notre éditeut de texte sera moind réactif.
|
||||
|
||||
#### Priorité stricte
|
||||
|
||||
Les processus sont triés par priorité et les plus important son exécutés en
|
||||
premier. contrairement au *Round-Robin* on gère la priorité mais ette technique
|
||||
est discriminatoire. Comment **assigner les priorités**? Au faciès?
|
||||
|
||||
#### Priorité dynamique
|
||||
|
||||
La priorité change au cours de la vie du processus car il change de
|
||||
comportement.
|
||||
|
||||
Dans le cas d'une **opération de compilation** par exemple, le
|
||||
compilateur lit les fichiers sources effectuant beaucoup de `read` et se
|
||||
bloauqnt donc. Ensuite il compile et utilise beaucoup de CPU.
|
||||
|
||||
L'ordonnanceur observe donc les métriques du passé pour prévoir l'avenir. Dans
|
||||
l'example du compilateur, le noyau observe que sur les 10ms de temporisation,
|
||||
notre processus **s'est bloqué (et change de contexte) au bout de 1ms**. Puis
|
||||
losqu'il compile, notre compilateur va rester sur le CPU **pour toute sa
|
||||
tempotisation**.
|
||||
|
||||
Mais comment choisir la bonne priorité en fonction de ces métriques? Tout
|
||||
simplement **en choisissant d'abord les processus les plus courts**. C'est la
|
||||
stratégie utilisée en général dans les **système interactifs**.
|
||||
|
||||
#### La stratégie utilisée dans le noyau Linux 2.4
|
||||
|
||||
Cette version du noyau Linux, la gestion de l'ordonnancement se fait par
|
||||
l'attribution de crédits. Un processus utilisant l'UC le fait en dépensant des
|
||||
crédits, plus il l'utilise plus il en dépense.
|
||||
|
||||
Lorqu'un processus n'a plus de crédit, il ne peut plus utiliser l'UC jusqu'à ce
|
||||
que le noyau en redistribue. Il le fait lorque aucun processus prêt n'a de
|
||||
crédit.
|
||||
|
||||
Les processus n'ayant pas dépensé tous ses crédits se voit prélever un
|
||||
"impots":
|
||||
|
||||
```
|
||||
Crédit = Cn + (Cn-1/2) + (Cn-2/4) + (Cn-3/8) + ...
|
||||
```
|
||||
|
||||
Dans la limite de 2C.
|
||||
|
||||
### Et pour les système multi-cœur
|
||||
|
||||
Chaque cœur exécute un ordonnanceur de façon asynchrone, la liste de processus
|
||||
peut-être :
|
||||
|
||||
* partagée entre tous les cœurs
|
||||
* distribuée par cœur
|
||||
|
||||
Il est bon de noter qu'une **UC peut envoyer une interruption à un autre UC**.
|
||||
|
||||
## Threads et processus
|
||||
|
||||
Un processus est un espace d'adressage plus une pile d'exécution. Un thread est
|
||||
juste un **autre flow d'exécution dans le même espace d'adressage**. La création
|
||||
de threads (aussi appelés processus légers) est dons plus efficace : il n'y a
|
||||
pas de création d'espace d'adressage.
|
||||
|
||||
Dans les noyaux modernes, tout est thread.
|
||||
|
||||
### Accès concurents à la mémoire
|
||||
|
||||
Les threads partagent donc des espace commun de mémoire, il est donc important
|
||||
de gérer des accès concurrent. En effet l'accès aux mêmes cases mémoires par
|
||||
plusieurs threads peut conduire à des fonctionnements arbitraires.
|
||||
|
||||
Il est à noter que les accès à la mémoire sont de toute façon atomique: *une
|
||||
opération de lecture ou écriture à la fois*. Mais ce n'est pas suffisant, un
|
||||
example de code est disponible [dans les cours de prog. système]({{< ref
|
||||
"../../progsys/5_les-processus_legers/index.md">}} "Les processus légers")
|
||||
|
||||
|
||||
Le noyau doit donc mettre en place des primitive de synchronisation.
|
|
@ -1 +1 @@
|
|||
Subproject commit fbd4163bd076a82adf430116ac4e5f165df86c8f
|
||||
Subproject commit 6167552546f60f5a22344909061afa5b62754555
|
Loading…
Add table
Add a link
Reference in a new issue