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

Основы ОС

Операционная система (ОС) — это программное обеспечение, которое управляет аппаратными ресурсами компьютера и предоставляет услуги для программ. Основные задачи ядра ОС:

  • Управление процессами: создание, планирование, завершение процессов.
  • Управление памятью: выделение и освобождение памяти, виртуальная память, страницы.
  • Управление вводом-выводом (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 использует трехэтапное рукопожатие для установления соединения:

  1. SYN — клиент отправляет серверу пакет с флагом SYN, указывая начальный порядковый номер (Sequence Number).
  2. SYN-ACK — сервер отвечает клиенту, устанавливая флаги SYN и ACK, а также подтверждая порядковый номер клиента.
  3. ACK — клиент подтверждает получение пакета SYN-ACK, устанавливая флаг ACK. Соединение установлено.

TCP Termination

Завершение соединения также происходит в несколько шагов:

  1. FIN — одна сторона (обычно клиент) инициирует завершение, отправляя пакет с флагом FIN.
  2. ACK — другая сторона подтверждает получение пакета с флагом FIN.
  3. FIN — другая сторона также отправляет пакет с флагом FIN.
  4. ACK — завершающее подтверждение.

Проблемы и особенности TCP

  • Потеря пакетов: TCP автоматически повторяет отправку потерянных пакетов.
  • Задержки: из-за проверки целостности и подтверждений могут возникать задержки.
  • Congestion Control: TCP использует механизмы управления перегрузками, чтобы избежать перегрузки сети.

UDP

UDP (User Datagram Protocol) — более простой протокол транспортного уровня, который не обеспечивает гарантированную доставку данных.

Особенности:

  • Нет установки соединения (без хендшейка).
  • Нет проверки целостности и подтверждений.
  • Подходит для приложений, где важна скорость, а потеря пакетов не критична (например, видеостриминг, игры).

Глубина проработки данных тем зависит от вас самих, для прохождения собеседования вам нужно знать основы и уметь объяснить их. Чем глубже знания в теме, тем выше шансы на успешное прохождение собеседования.