From owner-svn-src-user@FreeBSD.ORG Tue Nov 12 10:40:51 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 0A10D718; Tue, 12 Nov 2013 10:40:51 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id EE3402162; Tue, 12 Nov 2013 10:40:50 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rACAeoOD093264; Tue, 12 Nov 2013 10:40:50 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rACAeo5h093263; Tue, 12 Nov 2013 10:40:50 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201311121040.rACAeo5h093263@svn.freebsd.org> From: Gleb Smirnoff Date: Tue, 12 Nov 2013 10:40:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r258040 - user/glebius/course/06.filedesc X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Nov 2013 10:40:51 -0000 Author: glebius Date: Tue Nov 12 10:40:50 2013 New Revision: 258040 URL: http://svnweb.freebsd.org/changeset/base/258040 Log: Start slides for lecture on file descriptors. Added: user/glebius/course/06.filedesc/lection.tex Added: user/glebius/course/06.filedesc/lection.tex ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/glebius/course/06.filedesc/lection.tex Tue Nov 12 10:40:50 2013 (r258040) @@ -0,0 +1,141 @@ +\documentclass{beamer} + +\usepackage[utf8]{inputenc} +\usepackage[russian]{babel} +\usepackage{tikz} +\usepackage{adjustbox} +\usepackage{url} +\usepackage{array} +\usepackage{xcolor} +\usepackage{listings} +\usepackage{verbatim} +\usepackage{ifthen} + +\usetikzlibrary{positioning} +\usetikzlibrary{shapes} +\usetikzlibrary{decorations.pathmorphing} + +\input{../course.tex} + +\title{File descriptors, capabilities, descriptor multiplexing} + +\begin{document} + +\begin{frame} +\titlepage +\end{frame} + + +\FootReferences{open(2), socket(2), dup(2), dup2(2), dup3(2), fork(2)}{} +\begin{frame} +\frametitle{File descriptors properties} +\onslide<1-> { + Allocation: + \srcline {% + int fd;\\ + + fd = open(path, flags, ...);\\ + fd = socket(domain, type, protocol);\\ + pipe(fds[]); + } +} +\onslide<2-> { + Usage: + \srcline {% + read(fd, buf, size);\\ + write(fd, buf, size); + } +} +\onslide<3-> { + Explicit duplication: + \srcline {newfd = dup(fd);} +} +\onslide<4-> { + Implicit duplication: + \srcline {fork();} +} +\end{frame} + + +\FootReferences{unix(4)}{tools/regression/sockets/unix\_passfd} +\begin{frame} +\frametitle{File descriptors properties (non-standard)} +Passing descriptors via local socket: +\srcline {% + msghdr.msg\_control = message;\\ + msghdr.msg\_controllen = sizeof(message);\\ + cmsghdr = (struct cmsghdr *)message;\\ + cmsghdr->cmsg\_len = CMSG\_LEN(sizeof(int));\\ + cmsghdr->cmsg\_level = SOL\_SOCKET;\\ + cmsghdr->cmsg\_type = SCM\_RIGHTS;\\ + *(int *)CMSG\_DATA(cmsghdr) = fd;\\ + sendmsg(sockfd, \&msghdr, 0); +} +Receiving: +\srcline {% + recvmsg(sockfd, \&msghdr, 0);\\ + cmsghdr = CMSG\_FIRSTHDR(\&msghdr);\\ + fd = *(int *)CMSG\_DATA(cmsghdr);\\ +} +\end{frame} + + +\FootReferences{}{sys/sys/file.h, sys/sys/filedesc.h} +\begin{frame} +\frametitle{File descriptors inside kernel} +\begin{figure} +\begin{tikzpicture} + \node [name=file, struct, rectangle split parts=4] { + \textbf{struct file} + \nodepart{two} short f\_type + \nodepart{three} void *f\_data + \nodepart{four} struct fileops *f\_ops + }; +\onslide <2-> { + \node [name=process, left=.4\paperwidth of file, yshift=.3\paperheight, + draw, circle] { + user process + }; + \node [name=fd, anchor=north, node distance=3mm, + below right=of process.center, draw, circle, inner sep=1pt] { fd }; +} +\only<3> { + \draw [->, decorate, decoration={snake, amplitude=1mm, segment length=1cm}] + (fd) -- node [above, sloped] {???} (file.one west); +} +\only <4> { + \node [name=filedesc, struct, rectangle split parts=2, + left=of file.north west, anchor=north east] { + \textbf{struct filedesc} + \nodepart{two} struct file fd\_ofiles[{\color{red}fd}] + }; +} +\onslide <5-> { + \node [name=filedesc, struct, rectangle split parts=2, + left=of file.north west, anchor=north east] { + \textbf{struct filedesc} + \nodepart{two} struct \emph{filedescent} fd\_ofiles[{\color{red}fd}] + }; +} +\onslide <4-> { + \node [name=proc, struct, rectangle split parts=2, + right=of process] { + \textbf{struct proc} + \nodepart{two} struct filedesc *p\_fd + }; + \draw [->, decorate, decoration=snake] (process) -- (proc.one west); + \draw [pointer] (proc.two west) + -- node [name=x,pos=1] {} +(-5mm,0) -- (filedesc.north -| x); + \draw [pointer] (filedesc.two east) to [out=0, in=180] (file.one west); +} +\end{tikzpicture} +\end{figure} +\end{frame} + + +\FootReferences{capsicum(4), cap\_enter(2)}{} +\begin{frame} +\frametitle{Capability mode} +\end{frame} + +\end{document}