View
5.932
Download
0
Category
Preview:
Citation preview
Операционные системы
Виктор АшикКуратор практик
Лекция КИТ, Москва, 16 февраля 2011 года
2
#yakit
3
Операционные системыПлан лекции
— UNIX и *nix
— системные вызовы
— strace и ltrace
— планировщики ЦПУ и ввода-вывода
— управление памятью
4
Какие ОС вы знаете?
5
Сколько ОС у меня в телефоне?
6
UNIX®
1969 (AT&T/Bell Labs: Томпсон, Керниган, Ритчи)
Распространялась свободно
Стандарт де-факто и де-юро (POSIX)
AIX, Solaris, Mac OS X/FreeBSD/NetBSD/OpenBSD —генетически UNIX®
Linux, Minix — реализации
Есть реализации POSIX для Windows
Далее — *nix
7
*nix = переносимость
Стандарты
– Portable Operating System Interface [for Unix]
– ISO C/C++ (STL)
Runtime
– Shell
– Java
– Perl/Python/PHP/...
9
Что приложения хотят от ОС?
Абстракцию оборудования
Координацию совместной работы с устройствами
Изоляцию сбойных приложений
Обмен между приложениями
10
Как устроена ОС?
11
Какие сервисы предлагает ОС?
Процессы
Память
Содержимое файлов
Каталоги и имена файлов
Безопасность
… (пользователи, IPC, сеть, терминалы)
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
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;
}
15
Как это записать на C?ABI - syscalls
#include <unistd.h>
/* ... */
const char msg[] = "Hello world";
write( STDOUT_FILENO, msg, sizeof( msg ) - 1 );
/* Где вызов функции write превращается в syscall? */
16
Демо
ltrace
strace
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");}
}
18
Что делает код:
Системные вызовы: read, write, fork, exec, wait
Соглашения:
– при ошибке код возврата -1
– Код ошибки заносится в errno
– Функция perror выводит сообщение об ошибке errno
19
Вызов: fork
Создает потомка, точную копию вызвавшего процесса и возвращает управление родителю и потомку
Совпадает:
– память процесса (код, данные, стек)
– Атрибуты процесса: владелец, права, контекст
Отличаются:
– PID
– Код возврата при успешном fork
– У потомка 0
– У родителя pid потомка
20
Вызов: exec
Замещает содержимое памяти вызвавшего процесса инструкциями и данными из файла на диске
То есть исполняет файл
Процесс остается тем же (сохраняет pid, uid, …)
21
Вызов: wait
Ожидает завершения одного из потомков
Зачем?
Что будет если потомок завершится раньше wait?
22
Почему fork/exec разделены?
Как ls узнает текущий каталог, stdin, stdout?
– Наследует cwd и открытые файлы от родителя
Copy-on-write делает fork очень быстрым
23
Вызовы: read/write
Аргументы:
– Номер файла
– Указатель на буфер
– Число байтов
Возвращает число байтов
24
Организация ОС:Традиционный подход
Виртуализуется часть ресурсов
– ЦПУ
– память
Каждое приложение «монопольно» ими распоряжается
Зачем? Так проще писать приложения
*nix, Windows NT
25
Пример: виртуализация ЦПУ
Цель: эмулировать отдельный ЦПУ для каждого процесса
– Переключение ЦПУ прозрачно
– Процессу не нужно беспокоиться о других процессах
ОС выполняет процессы по-очереди до прерывания по таймеру
Таймер позволяет процессу не беспокоиться о переключениях
26
Пример: виртуализация ЦПУ
Как это достигается?
– ОС сохраняет и восстанавливает состояние (контекст) ЦПУ при каждом переключении
Что сохраняется?
– Регистры, флаги, указатели на таблицы виртуальной памяти
Где сохраняется?
– В таблице процессов
Прерывание таймера приводит к переключению на другой процесс
27
Демо
vmstat
cat /proc/1/status
ps
28
Сколько у процесса может быть состояний?
man ps/STATE
29
Пример: виртуализация памяти
Идея: для процесса доступно:
– все адресное пространство 2^32
– оно ссылается на его «частную память»
Удобно, безопасно
Как достигается? Физическая память общая.
30
Варианты виртуализации памятиВытеснение процесса на диск при переключении
– медленно
– имело смысл в 90-х
Использование сегментов x86
– переключать сегменты CS, DS на разные адреса
– фрагментация памяти
Применить страничный механизм ЦПУ
– Таблица физических адресов каждого 4К блока — страницы памяти
– Это таблица страниц
– Страницы можно помечать недействительными и переносить в подкачку — на диск
– При обращении к такой странице возникает прерывание и страницу можно загрузить обратно
– copy-on-write — избавить fork от копирования памяти
31
Демо
vmstat
cat /proc/swaps
swapon -s
32
Подходы к построению систем
Монолитное ядро
Гибридное (модульное ядро)
Микроядро
Экзоядро
33
Планирование процессорного времени
Многозадачность:
– Кооперативная (Windows 3.1, Mac OS 9, WOW16)
– Вытесняющая (preemptive)
34
Планирование процессорного времени
Долгосрочное
– batch
Среднесрочное
– BSD: выгрузка в подкачку неактивных процессов
– Android: завершение задач при нехватки памяти
Краткосрочное
– Планировщик ЦПУ в ядре
35
Алгоритмы планировщика ЦПУ
FIFO/FCFS
SJF (Shortest Job First)
Приоритетное планирование (ОСРВ)
Round-Robin
Многоуровневые очереди с обратной связью
– CFQ
36
Управление памятью
Распределение
Защита
Разделение (sharing)
Логическая организация (сегменты)
Физическая организация (подкачка)
37
Планирование ввода-вывода
Цели:
– Сократить время поиска диском
– Приоритезировать ввод-вывод
– Разделить полосу пропускания устройства между процессами
– Гарантировать исполнение запросов не позднее крайнего срока
38
Планирование ввода-вывода
Реализации:
– Случайное планирование (RSS)
– FIFO/FCFS
– LIFO
– CFQ
– SCAN (лифт)
– Noop (FIFO с объединением)
– Anticipatory (упреждающий)
– Deadline (
– ...
39
Управление памятью
Кеш-буфер
Промахи страниц
– Жесткие
– Мягкие
Алгоритмы виртуальной памяти
– LRU
– Опережающая подгрузка
– ...
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
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
Виктор Ашик
Куратор практик
119021, Россия, Москва,ул. Льва Толстого, д. 16.
+7 (495) 739-70-00+7 (495) 739-70-70 — факс
vashik@yandex-team.ru
Recommended