În acest curs vom explora conceptul de sistem de operare, arhitectura acestuia și modul în care gestionează procesele și resursele unui computer.
Un sistem de operare (OS) este software-ul care gestionează hardware-ul și permite rularea aplicațiilor.
- Tipuri de sisteme de operare:
- Monolitic: Kernel mare care conține toate funcțiile (ex: Linux, Windows).
- Microkernel: Kernel minimalist cu funcționalități separate (ex: QNX, Minix).
- Sisteme Distribuite: Rulează pe mai multe noduri (ex: Google Fuchsia, Plan 9).
- Sisteme de Timp Real (RTOS): Optimizate pentru latență redusă (ex: FreeRTOS, VxWorks).
- Kernel vs. User Space: Kernel-ul rulează în mod privilegiat, user space pentru aplicații.
- Interfața utilizatorului:
- CLI (Command Line Interface): Interacțiune prin terminal (ex: Bash, PowerShell).
- GUI (Graphical User Interface): Interfață grafică (ex: Windows Explorer, GNOME, KDE).
- Syscalls și API-uri: Comunicarea aplicațiilor cu sistemul de operare.
Sistemele de operare folosesc diverse tehnici pentru gestionarea proceselor.
- Procese vs. Fire de execuție (Threads):
- Un proces are memorie și resurse proprii.
- Un fir de execuție (thread) partajează memoria cu alte fire din același proces.
- Scheduling: Algoritmi de planificare a proceselor (FCFS, Round Robin, Priority Scheduling).
- Inter-Process Communication (IPC): Pipe-uri, mesaje, shared memory.
- Structura unui sistem de fișiere:
- FAT32, NTFS: Utilizate în Windows.
- ext4, ZFS, XFS: Utilizate în Linux și BSD.
- Alocarea memoriei: RAM, Swap, Paging vs. Segmentation.
- Virtual Memory și Memory Management Unit (MMU): Extinde memoria RAM prin paginare.
ps aux | head -10
Această comandă afișează primele 10 procese active pe sistem.
top
Comanda `top` afișează în timp real utilizarea CPU, memoriei și lista proceselor active.
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
printf("Proces copil cu PID: %d\n", getpid());
} else {
printf("Proces părinte cu PID: %d\n", getpid());
}
return 0;
}
Acest program creează un proces copil utilizând `fork()`.