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