Feb 15, 2014

Kernel. Networking

struct sk_buff

struct net_device
devices: eth ppp asdn atm
rx recieve
tz transmit

Explicit Congestion Notification (ECN) — (Явное Уведомление о Перегруженности)
ls -l /sys/class/net

cat /proc/net/sockstat
cat /proc/net/dev
cat /proc/net/tcp  # ports
cat /proc/net/udp
cat /proc/net/unix
Nearly all cards support DMA mode

IPv4
IPv6

UDP
TCP

mtu maximum transmission unit
ARP address resolution protocol
NAT network address translation; masquerading
transparent proxy
netfilter; iptables
finite state machine конечный автомат
tcpdump witeshark
tshark -V -2 -R 'ip.addr==208.118.235.148'

# http://stackoverflow.com/questions/5907527/application-control-of-tcp-retransmission-on-linux
/proc/sys/net/ipv4/tcp_retries2

man 5 socketckall

man 3 netlink
man 5 netlink
/proc/net/netlink

Feb 10, 2014

Unix as IDE. Man

man -k someterm
apropos someterm

info -k printf
info coreutils printf

Feb 5, 2014

Dia

sudo aptitude install autodia
autodia -l python -D -H -m -K -k -A -i test.py
autodia -l DBI -i "mysql:databasename:localhost" -U root -P pass

Feb 3, 2014

Extended file attributes, ACL

Does file system support?
sudo tune2fs -l /dev/sda1 | grep "Default mount options:"
# Default mount options:    user_xattr acl
Extended file attributes

Extended attributes: the good, the not so good, the bad.
On Linux and FreeBSD, cp will only preserve xattrs if given the option --preserve=xattr, also implied by the -a option. cp will not duplicate attributes by default, which is a reasonable default choice, even if it will be wrong in some situations (where you will have to use the options).

Extended Attributes – lsattr and chattr
  • a : append only 
  • c : compressed 
  • d : no dump 
  • e : extent format 
  • i : immutable 
  • j : data journalling 
  • s : secure deletion 
  • t : no tail-merging 
  • u : undeletable 
  • A : no atime updates 
  • C : no copy on write 
  • D : synchronous directory updates 
  • S : synchronous updates 
  • T : top of directory hierarchy
lsattr test.txt
chattr -a test.txt
SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы принудительного контроля доступа, которая может работать параллельно с классической дискреционной системой контроля доступа. Входит в стандартное ядро Linux. Также для функционирования SELinux требуются модифицированные версии некоторых утилит (ps, ls, и тд), которые обеспечивают поддержку новых функций ядра, и поддержка со стороны файловой системы.
setfattr -n user.comment -v "this is a comment" testfile
getfattr testfile
# user.comment
getfattr -n user.comment testfile
# user.comment="this is a comment"

POSIX Access Control Lists on Linux
DAC model
man 5 acl
getfacl dir
setfacl -m user:joe:rwx dir
man chacl

GCC, DDD

gcc
# -S to output assembly
gcc -O0 -S hello.c
# -masm=intel or -masm=att

ddd
gcc -g -c sample sample.c
ddd sample

ddd --disassemble sample

X86 Registers

Jan 23, 2014

Kernel. Modules, program exec, syscalls, elf

man 2 syscalls
system_call()
strace -e trace=open date
strace -c date

ltrace -T -S rmdir t
ltrace -c -S rmdir t
ldd `which python`
Elf
# view headers, section...
readelf -a a.out
readelf --sections=vmlinux a.out
readelf --dynamic a.out

# disassembly
objdump -M intel -S a.out

# list symbols from object files
nm a.out

# dependencies resolved from this list
cat /proc/kallsyms | grep printk

cat /boot/System.map-3.13.0 | grep printk

stat a.out
file a.out
Modules
# list modules
lsmod

# Modules dependencies
cat /lib/modules/3.12.7/modules.dep | grep vboxdrv
man depmod

# info
modinfo vboxdrv

# view system device information
systool -v -m vboxdrv
struct module
sys_init_module() -> load_module()
sys_delete_module()
request_module()
hello world module
man 2 init_module
man 2 delete_module

# which module loader
cat /proc/sys/kernel/modprobe
sudo sysctl -a | grep modprobe

man modprobe
man insmod
man rmmod

ll /sbin/udevd

udevadm monitor
cat /proc/sys/kernel/taintined
dmesg | grep taint

Linux kernel. Devices and drivers

cat /proc/partitions
cat /proc/devices

tmpfs
df -h # tmpfs and subfolders v
udev
ps aux | grep [u]dev  # demons
udevadm monitor  # new devices

struct gendisk
add_disk()

struct block_device
struct block_device_operations
struct request_queue
struct request

sumit_bio()
generic_make_request

Linux I/O Scheduler
struct elevator_ops
vfs_ioctl() - call filesystem specific ioctl methods
man 2 ioctl # control device

I/O ports and I/O memmory vs DMA
IOMMU
cat /proc/ioports
cat /proc/mem
struct device
struct bus_type
bus_register()

sysfs vs Kernfs introduced in 3.14
ll /sys/block
ll /sys/bus/pci/

ISA, PCI, PCI Express

struct pci_bus
struct pci_dev
struct pci_driver




Vfs
struct inode
struct inode_operations
dmesg|grep Inode
#[    0.001283] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)

struct file_struct - opened by process

struct file
struct file_operations

RCU

struct dentry
struct dentry_operations

NFS, AFS, SMB (CIFS)

struct super_block

mount
ll /dev/disk/by-*

ramfs, tmpfs, sysfs, procfs, debugfs CONFIG_DEBUG_FS
cat /proc/filesystems
ll /proc/buddyinfo
cat /proc/buddyinfo
cat /proc/slabinfo
sudo cat /proc/slabinfo
cat /proc/vmstat
cat /proc/kallsyms
ll /proc/kcore  # + gdb, ddd
cat /proc/interrupts

sys_open() - adds fd to current->fs
ACL
Ext2 reservation window


Ext3
writeback, ordered, journal

Jan 21, 2014

Arch

OpenRISC — открытый микропроцессор архитектуры RISC с открытым исходным кодом на языке описания аппаратного обеспечения Verilog. Проект создан сообществом OpenCores и распространяется по лицензии GNU LGPL. OpenRISC воплощён аппаратно и успешно производится в виде интегральных микросхем и ПЛИС (PLD).

SPARC - SPARC (Scalable Processor ARChitecture — масштабируемая архитектура процессора) — архитектура RISC-микропроцессоров, первоначально разработанная в 1985 году компанией Sun Microsystems.
МЦСТ R1000 (NUMA)

ARM (Advanced RISC Machine, Acorn RISC Machine, усовершенствованная RISC-машина) — семейство лицензируемых 32-битных и 64-битных микропроцессорных ядер разработки компании ARM Limited.

MIPS (англ. Microprocessor without Interlocked Pipeline Stages) — микропроцессор, разработанный компанией MIPS Computer Systems (в настоящее время MIPS Technologies) в соответствии с концепцией проектирования процессоров RISC (то есть для процессоров с сокращенным набором команд).

DEC Alpha (также известный как Alpha AXP) — 64-разрядный RISC микропроцессор, первоначально разработанный и произведённый компанией DEC, которая использовала его в собственной линейке рабочих станций и серверов.

PowerPC (или сокращённо PPC) — микропроцессорная RISC-архитектура, созданная в 1991 году альянсом компаний Apple, IBM и Motorola, известным как AIM.

IA-64 (also called Intel Itanium architecture) is the architecture of the Itanium family of 64-bit of Intel microprocessors. The architecture originated at Hewlett-Packard (HP), and was later jointly developed by HP and Intel.
The Itanium architecture is based on explicit instruction-level parallelism, in which the compiler decides which instructions to execute in parallel. This contrasts with other superscalar architectures, which depend on the processor to manage instruction dependencies at runtime. In all Itanium models, up to and including Tukwila, cores execute up to six instructions per clock cycle. The first Itanium processor, codenamed Merced, was released in 2001.

IA-32 (i386) (Intel Architecture, 32-bit, sometimes called i386 through metonymy) is the title of the third generation of x86 architecture, first implemented in the Intel 80386 microprocessors in 1985. It was the first incarnation of x86 to support 32-bit computing. As such, "IA-32" may be used as a metonym to refer to all x86 versions that supported 32-bit computing.

x86-64 (x64) — 64-битная аппаратная платформа (чипсет и архитектура набора команд), разработанная компанией AMD для выполнения 64-разрядных приложений.
Это расширение архитектуры x86 с почти полной обратной совместимостью.

List of Linux supported architectures
Modern Microprocessors. A 90 Minute Guide!

Jan 17, 2014

Kernel and Hardware Abbriviations


ASMP - Asymmetric multiprocessing
SMP - Symmetric Multiprocessing
Регистр процессора
OOO - Внеочередное исполнение (англ. Out-of-order execution) likely, unlikely
Кэш процессора
Алгоритмы кэширования: LRU - Least Recently Used; MRU - Most Recently Used
Выравнивание данных


UMA - Uniform Memory Access
NUMA - Non-Uniform Memory Access

BIOS  SLIC - Software Licensing Description Table
UEFI, EFI Extensible Firmware Interface (англ. Расширяемый интерфейс прошивки) — интерфейс между операционной системой и микропрограммами, управляющими низкоуровневыми функциями оборудования, его основное предназначение: корректно инициализировать оборудование при включении системы и передать управление загрузчику операционной системы. EFI предназначен для замены BIOS — интерфейса, который традиционно используется всеми IBM PC-совместимыми персональными компьютерами.
ACPI - Advanced Configuration and Power Interface — усовершенствованный интерфейс управления конфигурацией и питанием. Suspend, Hibernate
e820 - Функция прерывания 15H BIOS персонального компьютера, использующаяся для получения информации о распределении адресного пространства, имеющейся оперативной памяти и зарезервированных адресах.
DMI - (Desktop Management Interface) — интерфейс программирования приложений (API), позволяющий программному обеспечению собирать данные о характеристиках компьютера. dmidecode
RAM
ROM - Постоянное запоминающее устройство (ПЗУ)

MMU - Блок управления памятью или устройство управления памятью (англ. memory management unit)
PAE - Physical Address Extension — режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются 64-битные элементы таблиц страниц, c помощью которых процессор может адресовать 64 ГБ физической памяти (вместо 4 ГБ, адресуемых при использовании 32-разрядных таблиц), хотя каждая задача (программа) всё равно может адресовать максимум до 4 ГБ виртуальной памяти. Также, в новых моделях процессоров в PAE-режиме старший бит элемента таблицы страниц отвечает за запрет исполнения кода в странице, что затрудняет атаку по методу переполнения буфера.
NX bit - No eXecute Bit
PSE - Page Size Extension (PSE) — режим работы встроенного блока управления памятью x86-совместимых процессоров, в котором используются страницы размером в 4 (32-битные таблицы страниц) или 2 мегабайта (PAE/AMD64, 64-битные таблицы), в дополнение к обычным страницам x86 архитектуры в 4 килобайта.
DMA - Прямой доступ к памяти
TLB - Буфер ассоциативной трансляции (англ. Translation lookaside buffer, TLB) — это специализированный кэш центрального процессора, используемый для ускорения трансляции адреса виртуальной памяти в адрес физической памяти.
PGD - Global
PUD - Upper
PMD - Middle
PTE- Page Table entry

Slab Slub Slob
ASLR Address space layout randomization — технология, применяемая в операционных системах, при использовании которой случайным образом изменяется расположение в адресном пространстве процесса важных структур, а именно: образа исполняемого файла, подгружаемых библиотек, кучи и стека.


Completely Fair Scheduler
Round robin scheduling
FIFO - First In, First Out /usr/include/x86_64-linux-gnu/sys/queue.h