digraph matrix { graph [newrank=true, nodesep=0.1, overlap=true, ranksep=0.1, splines=false ]; node [fixedsize=false, height=0.5, shape=box, style="filled,setlinewidth(3)", width=1.1 ]; edge [arrowhead=none, arrowsize=0.5, style=invis, weight=10 ]; { node [color="#e27dd6ff"]; system_ [fixedsize=true, height=0, shape="", style=invis, width=0]; system [color="#e27dd6ff", fillcolor=white, fixedsize=true, height=0.3, row=func, tooltip=TODO, width=1]; system -> system_ [arrowhead="", color="#e27dd6ff", row=func, style="filled,setlinewidth(3)"]; SCI [color="#e27dd6ff", fillcolor="#d9e7ee", fixedsize=true, label="System calls", row=usr, shape=ellipse]; sysfs [color="#e27dd6ff", fillcolor="#b2d3e4", label="proc, sysfs,\nfile systems"]; SCI -> sysfs [color="#e27dd6ff", style="filled,setlinewidth(3)"]; DM [color="#e27dd6ff", fillcolor="#91b5c9", fixedsize=true, fontsize=10, height=0.4, label="Device\nModel", shape=octagon, width=1]; sysfs -> DM [color="#e27dd6ff", style="filled,setlinewidth(3)"]; log_sys [color="#e27dd6ff", fillcolor="#6a9ab1", fontsize=10, label="system run,\nmodules,\ngeneric\nHW access "]; DM -> log_sys [color="#e27dd6ff", style="filled,setlinewidth(3)"]; bus_drv [color="#e27dd6ff", fillcolor="#71809b", label="bus drivers"]; log_sys -> bus_drv [color="#e27dd6ff", style="filled,setlinewidth(3)"]; H2 [color="#e27dd6ff", fillcolor="#777777", fontcolor=white, fontsize=10, label="busess:\nPCI, USB ...", row=chip]; bus_drv -> H2 [color="#e27dd6ff", style="filled,setlinewidth(3)"]; } { node [color="#61c2c5"]; edge [color="#61c2c5"]; networking_ [fixedsize=true, height=0, shape="", style=invis, width=0]; networking [color="#61c2c5", fillcolor=white, fixedsize=true, row=func, width=1]; networking -> networking_ [arrowhead="", color="#61c2c5", row=func, style="filled,setlinewidth(3)"]; sock [color="#61c2c5", fillcolor="#d9e7ee", fixedsize=true, label=Sockets, row=usr, shape=ellipse]; prot_fam [color="#61c2c5", fillcolor="#b2d3e4", label="protocol\nfamilies"]; sock -> prot_fam [color="#61c2c5", style="filled,setlinewidth(3)"]; log_prot [color="#61c2c5", fillcolor="#6a9ab1", label="protocols:\nTCP, UDP, IP"]; prot_fam -> log_prot [color="#61c2c5", style="filled,setlinewidth(3)"]; netif [color="#61c2c5", fillcolor="#71809b", fontsize=10, label="network\ninterfaces\nand drivers"]; log_prot -> netif [color="#61c2c5", style="filled,setlinewidth(3)"]; net_hw [color="#61c2c5", fillcolor="#777777", fontcolor=white, fontsize=10, label="network:\nEthernet, WiFi ...", row=chip]; netif -> net_hw [color="#61c2c5", style="filled,setlinewidth(3)"]; NFS [color="#8383cc", fillcolor="#91b5c9", fixedsize=true, height=0.4, label=NFS, shape=octagon, width=0.6]; NFS -> log_prot [color="#61c2c5", style="filled,setlinewidth(3)", weight=0]; } { node [color="#8383cc"]; edge [color="#8383cc"]; storage_ [fixedsize=true, height=0, shape="", style=invis, width=0]; NFS; storage [color="#8383cc", fillcolor=white, fixedsize=true, row=func, width=1]; storage -> storage_ [arrowhead="", color="#8383cc", row=func, style="filled,setlinewidth(3)"]; FS [color="#8383cc", fillcolor="#d9e7ee", fixedsize=true, label="files and\ndirectories", row=usr, shape=ellipse]; VFS [color="#8383cc", fillcolor="#b2d3e4", label="Virtual\nFile System"]; FS -> VFS [color="#8383cc", style="filled,setlinewidth(3)"]; VFS -> NFS [color="#8383cc", style="filled,setlinewidth(3)", weight=0]; logFS [color="#8383cc", fillcolor="#6a9ab1", fontsize=10, label="logical\nfilesystems:\next3, xfs ..."]; VFS -> logFS [color="#8383cc", style="filled,setlinewidth(3)"]; PC [color="#51bf5b", fillcolor="#91b5c9", fixedsize=true, fontsize=10, height=0.4, label="page\ncache", shape=octagon, width=0.6]; VFS -> PC [color="#8383cc", style="filled,setlinewidth(3)", weight=0]; mmap [color="#51bf5b", fillcolor="#91b5c9", fixedsize=true, fontsize=10, height=0.4, label="memory\nmapping", shape=octagon, width=1]; VFS -> mmap [color="#8383cc", style="filled,setlinewidth(3)", weight=0]; block [color="#8383cc", fillcolor="#71809b", fontsize=10, label="Block\ndevices\nand drivers"]; logFS -> block [color="#8383cc", style="filled,setlinewidth(3)"]; PA [color="#51bf5b", fillcolor="#71809b", label="Page\nAllocator"]; PC -> PA [color="#51bf5b", style="filled,setlinewidth(3)", weight=0]; H4 [color="#8383cc", fillcolor="#777777", fontcolor=white, fontsize=10, label="storage devices:\nSCSI, NVMe ...", row=chip]; block -> H4 [color="#8383cc", style="filled,setlinewidth(3)"]; SW [color="#8383cc", fillcolor="#91b5c9", fixedsize=true, label=Swap, shape=octagon, width=0.6]; SW -> block [color="#8383cc", style="filled,setlinewidth(3)", weight=0]; } { node [color="#c46747", style="filled,setlinewidth(3)" ]; edge [color="#c46747"]; processing_ [fixedsize=true, height=0, shape="", style=invis, width=0]; processing [color="#c46747", fillcolor=white, fixedsize=true, row=func, width=1]; processing -> processing_ [arrowhead="", color="#c46747", row=func, style="filled,setlinewidth(3)"]; proc [color="#c46747", fillcolor="#d9e7ee", fixedsize=true, label=Processes, row=usr, shape=ellipse]; Tasks [color="#c46747", fillcolor="#b2d3e4"]; proc -> Tasks [color="#c46747", style="filled,setlinewidth(3)"]; sync [color="#c46747", fillcolor="#91b5c9", fixedsize=true, fontsize=10, label=synchronization, shape=octagon]; Tasks -> sync [color="#c46747", style="filled,setlinewidth(3)"]; sched [color="#c46747", fillcolor="#6a9ab1", label=Scheduler]; sync -> sched [color="#c46747", style="filled,setlinewidth(3)"]; IRQ [color="#c46747", fillcolor="#71809b", fontsize=10, label="interrupts\ncore,\nCPU arch"]; sched -> IRQ [color="#c46747", style="filled,setlinewidth(3)"]; CPU [color="#c46747", fillcolor="#777777", fontcolor=white, fontsize=10, row=chip]; IRQ -> CPU [color="#c46747", style="filled,setlinewidth(3)"]; } { node [color="#cfbf57ff", style="filled,setlinewidth(3)" ]; edge [color="#cfbf57ff"]; HI_ [fixedsize=true, height=0, shape="", style=invis, width=0]; HI [color="#cfbf57ff", fillcolor=white, fixedsize=true, label="human\ninterface", row=func, width=1]; HI -> HI_ [arrowhead="", color="#cfbf57ff", row=func, style="filled,setlinewidth(3)"]; char [color="#cfbf57ff", fillcolor="#d9e7ee", fixedsize=true, label="char\ndevices", row=usr, shape=ellipse]; input [color="#cfbf57ff", fillcolor="#b2d3e4", label="input\nsubsystem"]; char -> input [color="#cfbf57ff", style="filled,setlinewidth(3)"]; F7 [color="#cfbf57ff", fillcolor="#6a9ab1", label="HI class\ndrivers"]; input -> F7 [color="#cfbf57ff", style="filled,setlinewidth(3)"]; G7 [color="#cfbf57ff", fillcolor="#71809b", fontsize=10, label="HI\nperipherals\ndrivers"]; F7 -> G7 [color="#cfbf57ff", style="filled,setlinewidth(3)"]; H7 [color="#cfbf57ff", fillcolor="#777777", fontcolor=white, fontsize=10, label="display, keyboard,\nmouse, audio", row=chip]; G7 -> H7 [color="#cfbf57ff", style="filled,setlinewidth(3)"]; } { graph [rank=same]; edge [style=invis, weight=10 ]; functions_ [fixedsize=true, height=0, shape="", style=invis, width=0]; system; functions_ -> system; networking; system -> networking; storage; networking -> storage; memory [color="#51bf5b", fillcolor=white, fixedsize=true, row=func, width=1]; storage -> memory; processing; HI; processing -> HI; functions [color=gray, fillcolor=gray, fixedsize=true, row=func, style=dashed, width=0.8]; functions -> functions_ [arrowhead="", color=gray, style="", weight=""]; memory -> processing; } { graph [rank=same]; usr_ [fixedsize=true, height=0, shape="", style=invis, width=0]; SCI; sock; FS; proc; char; usr [fillcolor="#d9e7eeff", fixedsize=true, label="user space\ninterfaces", row=usr, shape=ellipse, style="filled,setlinewidth(0)"]; MA [color="#51bf5b", fillcolor="#d9e7ee", fixedsize=true, label="memory\naccess", row=usr, shape=ellipse]; } { edge [style=invis, weight=10 ]; system_; SCI; system_ -> SCI; networking_; sock; networking_ -> sock; storage_; FS; storage_ -> FS; memory_ [fixedsize=true, height=0, shape="", style=invis, width=0]; MA; memory_ -> MA; processing_; proc; processing_ -> proc; HI_; char; HI_ -> char; } { graph [rank=same]; D0 [fixedsize=true, height=0, shape="", style=invis, width=0]; sysfs; prot_fam; VFS; Tasks; input; virt [fillcolor="#b2d3e4", label="virtual\nsubsystems", style="filled,setlinewidth(0)"]; VM [color="#51bf5b", fillcolor="#b2d3e4", label="Virtual\nmemory"]; } { graph [rank=same]; node [fontcolor=white]; E0 [fixedsize=true, height=0, shape="", style=invis, width=0]; DM; NFS; mmap; sync; bridges [fillcolor="#91b5c9", shape=octagon, style="filled,setlinewidth(0)"]; } { graph [rank=same]; F0 [fixedsize=true, height=0, shape="", style=invis, width=0]; log_sys; log_prot; logFS; sched; F7; logical [fillcolor="#6a9ab1", style="filled,setlinewidth(0)"]; log_mem [color="#51bf5b", fillcolor="#6a9ab1", label="logical\nmemory"]; } { graph [rank=same]; G0 [fixedsize=true, height=0, shape="", style=invis, width=0]; bus_drv; netif; block; PA; IRQ; G7; HWI [fillcolor="#71809b", label="hardware\ninterfaces", style="filled,setlinewidth(0)"]; } { graph [rank=same]; H0 [fixedsize=true, height=0, shape="", style=invis, width=0]; H2; net_hw; H4; CPU; H7; HW [fillcolor="#777777", fontcolor=white, label="electronics,\nhardware", row=chip, style="filled,setlinewidth(0)"]; H5 [color="#51bf5b", fillcolor="#777777", fontcolor=white, fontsize=10, label="MMU, RAM", row=chip]; } subgraph mem { node [color="#51bf5b", height=0.5 ]; edge [color="#51bf5b"]; memory_; PC; mmap; SW; mmap -> SW [color="#51bf5b", style="filled,setlinewidth(3)", weight=0]; log_mem; mmap -> log_mem [color="#51bf5b", style="filled,setlinewidth(3)"]; PA; H5; PA -> H5 [color="#51bf5b", style="filled,setlinewidth(3)"]; log_mem -> PA [color="#51bf5b", style="filled,setlinewidth(3)"]; memory; memory -> memory_ [arrowhead="", color="#51bf5b", row=func, style="filled,setlinewidth(3)"]; MA; VM; MA -> VM [color="#51bf5b", style="filled,setlinewidth(3)"]; VM -> mmap [color="#51bf5b", style="filled,setlinewidth(3)"]; } bottom [label="© 2007-2019 Constantine Shulyupin http://www.MakeLinux.net/kernel/diagram", shape=plaintext]; H4 -> bottom [style="filled,setlinewidth(3)", weight=""]; layers [fillcolor=lightgray, height=0.1, style="filled,setlinewidth(0)", width=0.5]; functions -> layers; layers -> usr [arrowhead="", color=gray, style="filled,setlinewidth(1)"]; usr -> usr_ [arrowhead="", color="#d9e7eeff", minlen=2, style="filled,setlinewidth(3)"]; usr -> virt [color="#d9e7eeff", style="filled,setlinewidth(3)"]; virt -> D0 [arrowhead="", color="#b2d3e4", minlen=2, style="filled,setlinewidth(3)"]; virt -> bridges [color="#b2d3e4", style="filled,setlinewidth(3)"]; bridges -> E0 [arrowhead="", color="#91b5c9", minlen=2, style="filled,setlinewidth(3)", weight=""]; bridges -> logical [color="#91b5c9", style="filled,setlinewidth(3)"]; logical -> F0 [arrowhead="", color="#6a9ab1", minlen=2, row=logical, style="filled,setlinewidth(3)", weight=""]; logical -> HWI [color="#6a9ab1", row=logical, style="filled,setlinewidth(3)"]; HWI -> G0 [arrowhead="", color="#71809b", minlen=2, row=HWI, style="filled,setlinewidth(3)", weight=""]; HWI -> HW [color="#71809b", row=HWI, style="filled,setlinewidth(3)"]; HW -> H0 [arrowhead="", color="#777777", minlen=2, row=chip, style="filled,setlinewidth(3)", weight=""]; LKD [fontsize=20, label="Linux kernel diagram", shape=plain]; LKD -> storage; }