Операционные системы

41
Операционные системы Виктор Ашик Куратор практик Лекция КИТ, Москва, 16 февраля 2011 года

Upload: yaevents

Post on 12-Jun-2015

5.932 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Операционные системы

Операционные системы

Виктор АшикКуратор практик

Лекция КИТ, Москва, 16 февраля 2011 года

Page 2: Операционные системы

2

#yakit

Page 3: Операционные системы

3

Операционные системыПлан лекции

— UNIX и *nix

— системные вызовы

— strace и ltrace

— планировщики ЦПУ и ввода-вывода

— управление памятью

Page 4: Операционные системы

4

Какие ОС вы знаете?

Page 5: Операционные системы

5

Сколько ОС у меня в телефоне?

Page 6: Операционные системы

6

UNIX®

1969 (AT&T/Bell Labs: Томпсон, Керниган, Ритчи)

Распространялась свободно

Стандарт де-факто и де-юро (POSIX)

AIX, Solaris, Mac OS X/FreeBSD/NetBSD/OpenBSD —генетически UNIX®

Linux, Minix — реализации

Есть реализации POSIX для Windows

Далее — *nix

Page 7: Операционные системы

7

*nix = переносимость

Стандарты

– Portable Operating System Interface [for Unix]

– ISO C/C++ (STL)

Runtime

– Shell

– Java

– Perl/Python/PHP/...

Page 8: Операционные системы

9

Что приложения хотят от ОС?

Абстракцию оборудования

Координацию совместной работы с устройствами

Изоляцию сбойных приложений

Обмен между приложениями

Page 9: Операционные системы

10

Как устроена ОС?

Page 10: Операционные системы

11

Какие сервисы предлагает ОС?

Процессы

Память

Содержимое файлов

Каталоги и имена файлов

Безопасность

… (пользователи, IPC, сеть, терминалы)

Page 11: Операционные системы

12

Как приложения обращаются к системе?

ABI - syscallsmov edx,lenmov ecx,msgmov ebx,1 ;file descriptor (stdout)mov eax,4 ;system call number(sys_write)int 0x80 ;call kernel

mov eax,1 ;system call number (sys_exit)int 0x80 ;call kernel

section .data

msg db 'Hello, world!',0xalen equ $ - msg

Page 12: Операционные системы

13

Что плохо в этом примере?

Page 13: Операционные системы

14

Как приложения обращаются к системе?

ABI - syscalls

int main() {__asm__(

"movl $20, %eax \n""call *%gs:0x10 \n""movl %eax, pid \n"

);printf("pid is %d\n", pid);return 0;

}

Page 14: Операционные системы

15

Как это записать на C?ABI - syscalls

#include <unistd.h>

/* ... */

const char msg[] = "Hello world";

write( STDOUT_FILENO, msg, sizeof( msg ) - 1 );

/* Где вызов функции write превращается в syscall? */

Page 15: Операционные системы

16

Демо

ltrace

strace

Page 16: Операционные системы

17

Shell: /bin/*sh

Интерпретатор команд *nix

While (1) {write (1, "$ ", 2);readcmd (cmd, args); // parse user inputif ((pid = fork ()) == 0) { // child?

exec (cmd, args, 0);} else if (pid > 0) { // parent?

wait (0); // wait for child to terminate} else {

perror ("fork");}

}

Page 17: Операционные системы

18

Что делает код:

Системные вызовы: read, write, fork, exec, wait

Соглашения:

– при ошибке код возврата -1

– Код ошибки заносится в errno

– Функция perror выводит сообщение об ошибке errno

Page 18: Операционные системы

19

Вызов: fork

Создает потомка, точную копию вызвавшего процесса и возвращает управление родителю и потомку

Совпадает:

– память процесса (код, данные, стек)

– Атрибуты процесса: владелец, права, контекст

Отличаются:

– PID

– Код возврата при успешном fork

– У потомка 0

– У родителя pid потомка

Page 19: Операционные системы

20

Вызов: exec

Замещает содержимое памяти вызвавшего процесса инструкциями и данными из файла на диске

То есть исполняет файл

Процесс остается тем же (сохраняет pid, uid, …)

Page 20: Операционные системы

21

Вызов: wait

Ожидает завершения одного из потомков

Зачем?

Что будет если потомок завершится раньше wait?

Page 21: Операционные системы

22

Почему fork/exec разделены?

Как ls узнает текущий каталог, stdin, stdout?

– Наследует cwd и открытые файлы от родителя

Copy-on-write делает fork очень быстрым

Page 22: Операционные системы

23

Вызовы: read/write

Аргументы:

– Номер файла

– Указатель на буфер

– Число байтов

Возвращает число байтов

Page 23: Операционные системы

24

Организация ОС:Традиционный подход

Виртуализуется часть ресурсов

– ЦПУ

– память

Каждое приложение «монопольно» ими распоряжается

Зачем? Так проще писать приложения

*nix, Windows NT

Page 24: Операционные системы

25

Пример: виртуализация ЦПУ

Цель: эмулировать отдельный ЦПУ для каждого процесса

– Переключение ЦПУ прозрачно

– Процессу не нужно беспокоиться о других процессах

ОС выполняет процессы по-очереди до прерывания по таймеру

Таймер позволяет процессу не беспокоиться о переключениях

Page 25: Операционные системы

26

Пример: виртуализация ЦПУ

Как это достигается?

– ОС сохраняет и восстанавливает состояние (контекст) ЦПУ при каждом переключении

Что сохраняется?

– Регистры, флаги, указатели на таблицы виртуальной памяти

Где сохраняется?

– В таблице процессов

Прерывание таймера приводит к переключению на другой процесс

Page 26: Операционные системы

27

Демо

vmstat

cat /proc/1/status

ps

Page 27: Операционные системы

28

Сколько у процесса может быть состояний?

man ps/STATE

Page 28: Операционные системы

29

Пример: виртуализация памяти

Идея: для процесса доступно:

– все адресное пространство 2^32

– оно ссылается на его «частную память»

Удобно, безопасно

Как достигается? Физическая память общая.

Page 29: Операционные системы

30

Варианты виртуализации памятиВытеснение процесса на диск при переключении

– медленно

– имело смысл в 90-х

Использование сегментов x86

– переключать сегменты CS, DS на разные адреса

– фрагментация памяти

Применить страничный механизм ЦПУ

– Таблица физических адресов каждого 4К блока — страницы памяти

– Это таблица страниц

– Страницы можно помечать недействительными и переносить в подкачку — на диск

– При обращении к такой странице возникает прерывание и страницу можно загрузить обратно

– copy-on-write — избавить fork от копирования памяти

Page 30: Операционные системы

31

Демо

vmstat

cat /proc/swaps

swapon -s

Page 31: Операционные системы

32

Подходы к построению систем

Монолитное ядро

Гибридное (модульное ядро)

Микроядро

Экзоядро

Page 32: Операционные системы

33

Планирование процессорного времени

Многозадачность:

– Кооперативная (Windows 3.1, Mac OS 9, WOW16)

– Вытесняющая (preemptive)

Page 33: Операционные системы

34

Планирование процессорного времени

Долгосрочное

– batch

Среднесрочное

– BSD: выгрузка в подкачку неактивных процессов

– Android: завершение задач при нехватки памяти

Краткосрочное

– Планировщик ЦПУ в ядре

Page 34: Операционные системы

35

Алгоритмы планировщика ЦПУ

FIFO/FCFS

SJF (Shortest Job First)

Приоритетное планирование (ОСРВ)

Round-Robin

Многоуровневые очереди с обратной связью

– CFQ

Page 35: Операционные системы

36

Управление памятью

Распределение

Защита

Разделение (sharing)

Логическая организация (сегменты)

Физическая организация (подкачка)

Page 36: Операционные системы

37

Планирование ввода-вывода

Цели:

– Сократить время поиска диском

– Приоритезировать ввод-вывод

– Разделить полосу пропускания устройства между процессами

– Гарантировать исполнение запросов не позднее крайнего срока

Page 37: Операционные системы

38

Планирование ввода-вывода

Реализации:

– Случайное планирование (RSS)

– FIFO/FCFS

– LIFO

– CFQ

– SCAN (лифт)

– Noop (FIFO с объединением)

– Anticipatory (упреждающий)

– Deadline (

– ...

Page 38: Операционные системы

39

Управление памятью

Кеш-буфер

Промахи страниц

– Жесткие

– Мягкие

Алгоритмы виртуальной памяти

– LRU

– Опережающая подгрузка

– ...

Page 39: Операционные системы

40

Производительность в числахOperation Time (nsec)

L1 cache reference 0.5

Branch mispredict 5

L2 cache reference 7

Mutex lock/unlock 25

Main memory reference 100

Compress 1KB bytes with Zippy 3,000

Send 2K bytes over 1 Gbps network 20,000

Read 1MB sequentially from memory 250,000

Roundtrip within same datacenter 500,000

Disk seek 10,000,000

Read 1MB sequentially from disk 20,000,000

Send packet CA -> Netherlands -> CA 150,000,000

Page 40: Операционные системы

41

Производительность в числах

Operation Time (nsec)

System call overhead 400

Context switch between processes 3000

fork() (statically-linked binary) 70,000

fork() (dynamically-linked binary) 160,000

Page 41: Операционные системы

Виктор Ашик

Куратор практик

119021, Россия, Москва,ул. Льва Толстого, д. 16.

+7 (495) 739-70-00+7 (495) 739-70-70 — факс

[email protected]