Лекция №1 в курсе "Архитектура операционной системы (на примере Linux)", осень 2017 Преподаватель курса: Кирилл Владимирович Кринкин Страница лекции на сайте CS центра: goo.gl/q5jP4o Все лекции курса по порядку bit.ly/2kBPnnZ
Кирилл Владимирович, здравствуйте. После просмотра первой лекции уже есть вопросы. Т.е. libc является библиотекой которая предоставляет интерфейс приложениям, для общения с ос? Получается, если удалить libc, то сама ос будет работать? А если я такое сделаю, как я узнаю что она работает? Получается у мени ни shell, ни тем паче gui не заведется, так?
Автор во многих вопросах плывет. Сегмент данных не изменяется в размере, это чаще всего обычные константы, и глобальные переменные фиксированной длины. .data .bss .text загружаются ровно так в память как они прописаны в исполняемом файле, с единственной разницей, что размер сегмента в бинарнике ради экономии места сокращается в местах где нули, а при запуске считывается в заголовке размер сегмента, и в памяти происходит заполнение до нужного размера нулями. Хип живет отдельно, и может выделяться в разных адресах где-то посредине между стеком - верхними адресами и нижними адресам заполненными кодом ОС, и программами с их сегментами кода и данных. Отсюда же возникает известная проблема, как фрагментация памяти, и снижение производительности из-за нее, последовательное чтение и запись памяти всегда быстрее чем случайные. ОС просто ищет свободный участок и выделяет программе по запросу, так же ОС при получении запроса на освобождение памяти не старается ее сразу освободить, а старается кешировать выделение и делит память на поколения, и по запросу старается вернуть программе память в том же участке памяти, если памяти достаточно для других программ. И еще ОС может дефрагментировать хип, и перемещать блоки памяти, чтобы снизить фрагментацию, когда у одной программы блоки памяти в разных участках физической памяти. И лектор не знает system v abi calling convention, что параметры в функции передаются как раз чаще всего не через стек, а через регистры 1-параметр rax, 2-параметр rdi, 3-параметр rsi, 4-параметр rdx, 5-параметр rcx, 6-параметр r8, 7-параметр r9 и от 8 параметра передаются уже через стек, но в обратно порядке т.е. сначала идет 10 параметр, потом 9 и 8. Так же регистры по этой же причины делятся на те, что сохраняются вызвавшей функцией и те что сохраняются вызываемой функцией, поэтому в зависимости от регистра кто-то из них должен сохранить регистр в стеке, а потом восстановить при выходе из функции, чтобы исключить ситуацию когда один изменил регистр, а другой функции нужно было значение регистра которое было затерто. Ну и код на ASM там бредовый на слайде...
А по моему отзыв писал какой то обосранец. у него нет базы общения и понимания структуры общества и все что есть это зазубренный материал по технологии и то который он взял из сети а книг по теме прочитал 0.3. автор отзыва не понимает для кого этот курс и кто перед ним и он строчил в пустоту лист как последний птушник. фу :) автор отзыва кретин отстой и неуч. и все что бы он не взял из чата джипити по жизни с бабами ему не помогут он так и будет в яндексе смотреть видео и мечтать о железе....фу на таких....
Очень странно что в базе людям это в мозг, ОС GNU (весь мир это знает как свободное программное обеспечение в соответствии с лицензией GNU) Linux ЯДРО для ОС GNU. Ричард Мэттью Столлман мог взять и другое яро а вернее и брал. Для понимания GNU = GNU's Not Unix , XNU = X - Not Unix . В первом случае ОС, а во втором ЯДРО для ОС macOS, Ядро NT (NexT) для ОС Windows существует и в современных ОС но мало кто об этом догадываются, думаю это не маловажное замечание не валить все в оду кучу Проект Debian на OS GNU + ядро Linux Проект Debian на OS GNU + ядро Hurd (здесь Линус Торвальдс даже близко не стоял :))) Так Дебиан это Линуск подобная ОС или нет (риторический вопрос) единственное исключение не GNU это Андроид