---
# System prepended metadata

title: SYS2 2
tags: [' system', ' ING1', ' réseaux', ' S6', SYS2]

---

---
lang: fr
title: SYS2 2
tags: SYS2, system, réseaux, ING1, S6
---

# SYS2 2

* 25/02/2019
* Gaby


++Aujourd'hui++: 
- Process
- Tasks

### Process vs Thread

- Process:
    - Plusieurs adresses spaces
    
- Thread:
    - Un seul adresses spaces


==Adress space==: Adresse mémoire

==Process==: instantiation en mémoire d'un programme avec plusieurs états. Idenfiable via le pid, avec une durée de vie, et qui est schedulé.


Comment passer d'un process à un autre ?
On peut passer de l'un à l'autre toutes les quelques millisecondes.

Pour un thread c'est à peu près pareil.

Execve permet de créer un process.
Fork permet de faire de l'execution parallèle en duplicant un process mais aussi l'adresse space.

Probleme ? Si on veut travailler sur les même données (c-a-d même adresse space).

Solution 1: 
- Signaux (4b)
- Pipe | // named pied (pipe rattaché à un pipe) (créer avec mkfifo)
    - Le probleme est que l'on doit avoir créer le pipe initialement pour pouvoir faire de la comunication
- Socket
    - Unix en premier parametre, qui est une socket / une fichier local qui:
        - Pas besoin d'authentification
        - Permet de donner des privilèges
        - Envoyer des fd
- SHM: Permet de créer des zone de mémoire partagé (cf. schéma en dessous)
    
==Drop les privilères:== Quand on a besoin de privilège pour faire des trucs, mais qu'une fois fini on relache les privilèges (pour que ce soit plus safe).

++Ex++: Word n'a pas le droit d'ouvrir n'importe quel fichier. Du coup quand on veut ouvrir un fichier, on lui donne le droit d'ouvrir des fichiers, il ouvre celui qu'on lui demande, puis une fois ouvert, on lui retire les droits.

<img src="https://docs.google.com/drawings/d/e/2PACX-1vRkFAxcJVCtxm2kop-XlptWE2fdSofg66OHqMY1bCXg84BB9cD_kWTUlRC8BRaSlouGto8YuZuix9sp/pub?w=765&amp;h=700">

Globalement, étant donné qu'il faut masse manip pour synchroniser les données, puis les signaux, puis la mémoire etc... On a créer les **threads**

## Thread

<img src="https://docs.google.com/drawings/d/e/2PACX-1vTAT31BKNyFvZailN3S3TqHXeoxqXRLQrcAu1A1GwX3LpBK0mjwHFp_qYWSjplFzO8dMX6lvjmpzWay/pub?w=674&amp;h=704">

Ce qui n'est pas partagé dans un thread: 
- Registre
- Stack


Comment créer un nouveau thread:
- New thread(pointer sur fonction pour savoir où on en était)
- Allouer une stack
- Allouer un état

Pour changer d'un thread à un autre: On utilise sigalarm à intervalle de temps régulier.

Mais du coup comment on retrouve le context dans lequel on s'est arrêter ? -> Sigaction

pthread -> Posix Thread (LIB):
- _created (fct)

## Tasks

A partir du moment où un truc est schedulé on appelle ça une tache. Cela peut etre un process, un thread ou autre.