
Александр Жаков
Golang Developer

Операционные системы
Основы ОС
Операционная система (ОС) — это программное обеспечение, которое управляет аппаратными ресурсами компьютера и предоставляет услуги для программ. Основные задачи ядра ОС:
- Управление процессами: создание, планирование, завершение процессов.
- Управление памятью: выделение и освобождение памяти, виртуальная память, страницы.
- Управление вводом-выводом (I/O): взаимодействие с устройствами ввода/вывода.
- Файловая система: организация и управление файлами.
Linux
Основные команды:
- ls, cd, pwd, cp, mv, rm — базовые команды работы с файлами.
- ps, top, kill, htop — управление процессами.
- chmod, chown, ls -l — управление правами доступа.
Файловая система:
- Иерархическая структура с корневым каталогом /.
- Важные каталоги: /etc (конфигурации), /bin (бинарные файлы), /var (логи и временные файлы).
- Права доступа: чтение (r), запись (w), выполнение (x) для владельца, группы и остальных (chmod 755).
Ядро Linux
Процессы:
Процесс — выполняемая программа. У каждого процесса есть PID (идентификатор процесса).
Состояния процесса:
- Running — выполняется.
- Sleeping — ожидает ресурс.
- Zombie — процесс завершён, но ещё не освобождён родительским процессом.
Потоки:
- Легковесные процессы, которые разделяют память с другими потоками одного процесса.
- Используются для параллелизма.
Планировщик:
- Определяет, какой процесс будет выполняться в следующий момент времени.
- Алгоритмы планирования: CFS (Completely Fair Scheduler), FIFO, Round Robin.
Разделение пространства:
- User space — выполняются пользовательские программы.
- Kernel space — выполняется код ядра, прямой доступ к аппаратным ресурсам.
Syscall (Системные вызовы)
Системные вызовы — это интерфейс между пользовательским пространством и ядром. Примеры:
- read — чтение из файла или сокета.
- write — запись в файл или сокет.
- fork — создание нового процесса.
Go и Syscalls:
- В Go системные вызовы обёрнуты в стандартные пакеты (os, syscall).
- Пример: os.Open() вызывает open() syscall в Linux.
Сигналы
Сигналы — это способ взаимодействия с процессами.
- SIGTERM — мягкое завершение процесса.
- SIGKILL — принудительное завершение процесса.
- SIGINT — прерывание процесса (обычно Ctrl+C).
Обработка сигналов в Go:
Используется пакет os/signal для перехвата и обработки сигналов.
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func main() {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
fmt.Println("Waiting for signals...")
sig := <-sigs
fmt.Println("Received signal:", sig)
}
IPC (Inter-Process Communication)
Межпроцессное взаимодействие (IPC) позволяет процессам обмениваться данными:
- Shared Memory — самая быстрая форма IPC. Процессы разделяют общую область памяти.
- Sockets — сетевое взаимодействие (TCP/UDP).
- Pipes — однонаправленные или двунаправленные каналы связи между процессами.
Sockets в Go:
package main
import (
"fmt"
"net"
)
func main() {
listener, _ := net.Listen("tcp", ":8080")
defer listener.Close()
fmt.Println("Listening on :8080")
for {
conn, _ := listener.Accept()
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
fmt.Fprintf(conn, "Hello from Go server\n")
}
Работа с сетью
- TCP — протокол передачи данных с установлением соединения.
- UDP — протокол передачи данных без установления соединения.
- HTTP — протокол передачи гипертекста.
- REST — архитектурный стиль взаимодействия компонентов.
- gRPC — высокопроизводительный RPC-фреймворк.
- WebSockets — протокол для обмена сообщениями между браузером и сервером.
- DNS — система доменных имён.
TCP/IP
Основы TCP/IP
TCP/IP — это стек протоколов, обеспечивающий сетевое взаимодействие. Он состоит из нескольких уровней:
- Физический уровень — передача битов по физическим носителям (Ethernet, оптоволокно).
- Канальный уровень — формирование кадров данных (MAC-адреса, управление ошибками).
- Сетевой уровень — маршрутизация пакетов (IP-протокол).
- Транспортный уровень — обеспечение надежной передачи данных (TCP, UDP).
- Прикладной уровень — взаимодействие с приложениями (HTTP, DNS, FTP и т.д.).
IP-пакет
IP-пакет — это базовая единица передачи данных на сетевом уровне. Он содержит:
- Заголовок IP (20 байт)
- Версия протокола (IPv4 или IPv6)
- Адрес отправителя и получателя
- Поле TTL (Time To Live)
- Протокол транспортного уровня (TCP, UDP, ICMP)
- Полезная нагрузка (TCP-пакет или другие данные)
TCP-пакет
TCP-пакет — это часть полезной нагрузки IP-пакета. Он содержит:
- Заголовок TCP (минимум 20 байт):
- Порты отправителя и получателя
- Порядковый номер (Sequence Number)
- Номер подтверждения (Acknowledgment Number)
- Флаги (управляющие биты)
- Размер окна (Window Size)
- Контрольная сумма
Флаги TCP:
- SYN — начало соединения (synchronize)
- ACK — подтверждение данных (acknowledge)
- FIN — завершение соединения (finish)
- RST — сброс соединения (reset)
- PSH — немедленная передача данных (push)
- URG — данные с высоким приоритетом (urgent)
TCP 3-way Handshake
TCP использует трехэтапное рукопожатие для установления соединения:
- SYN — клиент отправляет серверу пакет с флагом SYN, указывая начальный порядковый номер (Sequence Number).
- SYN-ACK — сервер отвечает клиенту, устанавливая флаги SYN и ACK, а также подтверждая порядковый номер клиента.
- ACK — клиент подтверждает получение пакета SYN-ACK, устанавливая флаг ACK. Соединение установлено.
TCP Termination
Завершение соединения также происходит в несколько шагов:
- FIN — одна сторона (обычно клиент) инициирует завершение, отправляя пакет с флагом FIN.
- ACK — другая сторона подтверждает получение пакета с флагом FIN.
- FIN — другая сторона также отправляет пакет с флагом FIN.
- ACK — завершающее подтверждение.
Проблемы и особенности TCP
- Потеря пакетов: TCP автоматически повторяет отправку потерянных пакетов.
- Задержки: из-за проверки целостности и подтверждений могут возникать задержки.
- Congestion Control: TCP использует механизмы управления перегрузками, чтобы избежать перегрузки сети.
UDP
UDP (User Datagram Protocol) — более простой протокол транспортного уровня, который не обеспечивает гарантированную доставку данных.
Особенности:
- Нет установки соединения (без хендшейка).
- Нет проверки целостности и подтверждений.
- Подходит для приложений, где важна скорость, а потеря пакетов не критична (например, видеостриминг, игры).
Глубина проработки данных тем зависит от вас самих, для прохождения собеседования вам нужно знать основы и уметь объяснить их. Чем глубже знания в теме, тем выше шансы на успешное прохождение собеседования.