Files
system-programming/chp4/README.md
Fabio Scotto di Santolo 22a46c991d Update README.md
2025-06-28 09:45:41 +02:00

46 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Chapter 4 Advanced File I/O
## Scatter/Gather I/O
- Scatter/gather I/O allows reading or writing data to/from multiple buffers in a single system call.
- Uses `readv()` and `writev()`:
- `readv(fd, iov, iovcnt)`: reads into multiple buffers (`iov` array).
- `writev(fd, iov, iovcnt)`: writes from multiple buffers.
- Improves efficiency by reducing system calls.
## Event Poll (`select()`, `poll()`, `epoll`)
- Traditional multiplexing: `select()`, `poll()` (limited scalability).
- Linux-specific: `epoll` for efficient event notification.
- `epoll_create()`: create epoll instance.
- `epoll_ctl()`: control interest list (add, modify, remove fds).
- `epoll_wait()`: wait for events.
- Edge-triggered vs level-triggered modes.
## Memory-Mapped Files (`mmap()`)
- Maps files or devices into memory for direct access.
- System calls: `mmap()`, `munmap()`.
- Benefits: faster I/O, shared memory.
- Use `msync()` to synchronize changes.
- Resizing mappings, changing protections.
- Advisory calls:
- `posix_fadvise()`: give advice about expected I/O patterns.
- `readahead()`: prefetch file data.
- Pros and cons of memory mapping.
## Asynchronous I/O and I/O Scheduling
- Distinction between synchronous and asynchronous I/O.
- Linux AIO APIs for asynchronous operations.
- I/O schedulers:
- Manage disk request ordering.
- Examples: CFQ, noop, deadline.
- Optimizing I/O performance by choosing schedulers.
- Concepts of disk addressing and request life cycle.
## Miscellaneous
- `ioctl()`: device-specific operations.
- Zero-copy transfers: `sendfile()`, `splice()`.
---
> This chapter covers advanced Linux I/O techniques aimed at improving performance and flexibility in system programming.