development

Notes on Memory Mapped Files using mmap

Introduction mmap maps a file to a process virtual address space. The file blocks are loaded as needed, in units of the system page size. Each I/O must align with the page size. A block load is handled as a page fault. mmap() can provide a private or shared mapping of a region. mmap() to […]

Read more
development

One Way Communication with Pipe in Linux

Pipe uses kernel buffer to store data. It is a unidirectional read/write buffer and connects two processes. Each end (read or write) Pipe mimics a file operation. A process can choose to read or write (but not both). The processes have to use at least two pipes for two-way communication. Example Communication Parent process can […]

Read more
development

Why Docker is a Long Term Future for Platform?

What make Docker so popular and long-lasting? Container is essentially OS level virtualization. Each application gets illusion of its own OS, having almost absolute control over it. Another advantage is that host OS knows about the container processes and hence can share its resources among hosted containers. The concept of containers was started by FreeBSD, […]

Read more
Linux internals

Linux Memory Management Tricks

Tips to Improve Dynamic Memory Performance Instead of using memset() to initialize malloc()’ed memory, use calloc(). Because when you call memset(), VM system has to map the pages in to memory in order to zero initialize them. It’s very expensive and wasteful if you don’t intend to use the pages right away. calloc() reserves the […]

Read more
development

Internals of Linux Process Signals

Linux Signals A process in Linux is represented as task_struct. A process A sends a signal to process B using system call kill() or kill -<sig num> <pid>. Kernel updates the task_struct of the receiving process B. It changes the signal field with the passed value. The scheduler checks the signals on a process before […]

Read more