Symptoms of Complexity

Prof. George Candea School of Computer & Communication Sciences Building Bridges

A RTlClES

A COMPUTER SCIENCE PERSPECTIVE OF BRIDGE DESIGN

What kinds of lessonsdoes a classical engineering discipline like bridge design have for an emerging engineering discipline like computer systems Observation design?Case-study editors Alfred Spector and David Gifford consider the • insight and experienceof bridge designer Gerard Fox to out how strong the parallels are. • bridges are normally on-time, on-budget, and don’t fall ALFRED SPECTORand DAVID GIFFORD • projects rarely ship on-time, are often over- AS Gerry, let’s begin with an overview of THE DESIGN PROCESS bridges. AS What is the procedure for designing and con- GF In the United States, most highway bridges are budget, and rarely work exactly as specified structing a bridge? mandated by a government agency. The great major- GF It breaks down into three phases: the prelimi- ity are small bridges (with spans of less than 150 nay design phase, the main design phase, and the feet) and are part of the public highway system. construction phase. For larger bridges, several alter- There are fewer large bridges, having spans of 600 native designs are usually considered during the Blueprints for bridges must be approved... feet or more, that carry roads over bodies of water, preliminary design phase, whereas simple calcula- • gorges, or other large obstacles. There are also a tions or experience usually suffices in determining small number of superlarge bridges with spans ap- the appropriate design for small bridges. There are a proaching a mile, like the Verrazzano Narrows lot more factors to take into account with a large Bridge in New Yor:k. for structural integrity, earthquake and flood safety, etc. bridge: aesthetics, method of construction, cost of • materials, etc. The preliminary design report for a AS What are the requirements for a bridge? large bridge usually describes three or four alterna- GF There are several categories of requirements. tive bridge types, estimates their costs, and provides For instance, there are funcfionalify requirements: a rendering of what the bridge will look like. Usu- Foundations are inspected The lanes should be sufficiently wide, the bridge ally, the designer recommends one of the alterna- • should have safe barriers to deflect cars back onto tives to the . There would also usually be hear- the roadway, and the lighting should be sufficient. ings to get the public’s reaction. There are serviceability requirements: We don’t want you don’t just build a pillar and test if it stands the bridge to vibrate excessively and scare people, DG Do you estimate both the initial cost and the • and we don’t want large cracks in concrete bridges. life-cycle cost for each of the alternatives? Of course, there is the ultimate strength requirement: GF Life-cycle costing is not in wide use for bridges, We don’t want the bridge to fail. Then there is an although I think it should be. For example, consider aesthetics requirement: The bridge should be pleas- the life-cycle cost of a bridge’s deck, the portion of ing to the eye. There’s also a long-term maintainability Fundamental difference: the bridge that comprises the riding surface. One requirement, which involves corrosion protection of • alternative is to design an orthotropic steel deck, various elements. For example, cables tend to be which can support traffic and also help to carry the very susceptible to stress corrosion, and therefore weight of the bridge itself. The alternative is a con- their protection is ‘very important. Finally, there is crete slab deck, which costs a lot less initially, but • laws of physics vs. laws of human intellect ... the cost-effectiveness requirement: The finished prod- does not last nearly as long as a steel deck. Since the uct should meet all of the above requirements at the initial cost is the primary thing that clients look at best possible cost. today, most new bridges in this country are being 01986 ACM OOOl-0762/66/0400-0268 7511 built with concrete decks. At the same time, many

268 Conmunications of fhe ACM April 1986 Volume 29 Number 4

George Candea Principles of Computer Systems 2 Four Symptoms of Complexity

System • Large number of components • Large number of interconnections • Many irregularities and exceptions • High “Kolmogorov complexity”

Interface Environment

George Candea Principles of Computer Systems 3 Symptom #1: Many Components

George Candea Principles of Computer Systems 4 Symptom #2: Many Interconnections

srcpac

abs devtools ypserv --stringyperl-mailtools openslp mdadm namcap memtest86+ v86d ppp grub rsync perl-mime-tools snarf rp-pppoe grub2-efi-x86_64 ifenslave perl-convert-binhex fcpci xf86-video- screen capi4k-utils sed tiacx-firmware initscripts nilfs-utils python-iwscan isdn4k-utils lirc pptpclient nano snd modemmanager dmraid nvidia-utils wireless_tools -firmware licenses bridge-utils ntp perl-bit-vector perl-mime-lite nouveau-firmware procps perl-digest-nilsimsa kernel26 -progs-unstable ossp perl-carp-clan fcpcmcia ode yp-tools ddrescue acl xf86-video-v4l b43-fwcutter nouveau-drm-lts nvidia-lts rfkill mkpxelinux rpcbind perl-digest-hmac perl--spf perl-mime-typesperl--date-format kbd sdparm parted perl-io-socket-ssl archboot nfsidmap lvm2 hwdetect razor module--tools zd1211-firmware iptables pm-utils nvidia hddtemp reiserfsprogs perl-soap-lite librpcsecgss perl-net-dns chkrootkit libmspack ipw2200-fw pcmciautils perl-class-inspector pacman nvidia-173xx which fam fsarchiver spamassassin util-linux xf86-input-keyboard libdiscid linux--headers lzo2 perl-libwww re2c xf86-video-glint fuse ipw2100-fw -netcat net-tools -ares dhcpcd perl-passwd-md5 nfs-utils dosfstools perl-net-ip findutils syslinux usermin perl-digest-sha1 speedtouch lxsplit libtirpc ypbind-mt e2fsprogs perl--parser pacman-mirrorlistbash xf86-video-mach64 mkisolinux linux-atm partitionmanager perl-html-tagset mpck mksyslinux libgssglue source-highlight mkinitcpio perl-uri hdparm pyalpm kexec-tools xf86-video-unichrome xfsprogs mkbootcd enscript rssh xf86-video-rendition mkinitcpio-nfs-utils fping tree gksu lilo libirman libui-sh xf86-video-chips shadow dcron netcfg ethtool gpart haskell-http sysvinit gawk acpid wipe ghc tzdata jfsutils perl-template-toolkit ifplugd xf86-video-cirrus kernel26-lts iana-etc usbutils mkinitcpio-busybox progsreiserfs vpnc filesystem haskell-fgl lcab dmapi laptop-mode-tools haskell-transformers xf86-video-mga catdoc pdksh perl-appconfig haskell- diffutils cdargs haskell-network di vim-buftabs aif haskell-regex-compat man-db mlocate link-grammar avfs dcfldd coreutils xf86-video- haskell-parallel ftjam proftpd haskell-quickcheck haskell-text mtx qhull liboil gpm libvisual hexedit fakeroot haskell-regex-base xf86-video-sis glibc inetutils libdaemon libmpdclient haskell-regex- muparser xf86-video-dummy bftpd libcap haskell-stm libcdaudio pkg-config haskell-platform haskell-deepseq dvdrtools xf86-input-aiptek at attr xf86-video-xgi less docker tdb lzo perl-locale-gettext haskell- time run-parts -nettool haskell-haskell-src netkit-bsd-finger whois haskell-cgi xf86-input-vmmouse pam_ldap haskell-hunit cpufrequtils perl-libintl-perl mpc samba quota-tools bison xf86-video-neomagic haskell-syb cloog nasm tcp_wrappers tftp-hpa sharutils haskell-glut isl cfitsio libtextcat xinetd haskell-html xf86-video-fbdev cd-discid flex schedtool cronie glsof gettext cabal-install xf86-video-sisusb cracklib xf86-video-ast help2man fssos-nsvs xf86-video-s3virge haskell- libmpc xf86-video-xgixp logrotate vsftpd bin86 mod_perl python-pip haskell-parsec diffstat libasyncns syslog-ng m4 gcc watchdog imap psmisc barcode pam xf86-input-joystick convmv python-distribute haskell-mtl ecl xf86-video-savage xf86-video-i128 perl--string sysklogd lsof srm python-virtualenv happy mhash emovix subversion unison xf86-video-tdfx ncmpc eventlog perl-error dnsutils python-nose xf86-video-nv zile gpgme -toolkit ppl capi4hylafax libindi ggz-client-libs mcrypt perl-event libnova iputils libiodbc -completion xf86-video-i740 erlang setserial gmp libpipeline mt-st dmidecode perl-time-hires xf86-input-acecad cryptsetup xf86-video-siliconmotion perlperl-text- idnkit iptraf-ng libedit linux_logo hyphen procinfo-ng gnupg2 pdns perl-net-upnp alex gen-init-cpio ncftp xf86-video-r128 xf86-input-mouse libldap imake hspell lpsolve libmcrypt cowsay glade-perl perl-term-readkey libgpg-error xf86-input-void xf86-video-s3 re- perl-fcgi cvsps eject patch apr-util perl-net- pm-quirks aalib mtr libggz gnugo pciutils hal-info libassuan postfix xsp -perl fbset pmount gnuchess xf86-video-vesa libotr perl-netaddr-ip davfs2 xmlto libksba zsh keyutils figlet nss-mdns openldap db nss_ldap -perl alsa-utils pwgen gsm xf86-video-voodoo mod_mono perl-anyevent storage-fixup cyrus-sasl-plugins lensfun htop dirmngr gdbm perl-yaml-syck ethstatus dnsmasq grml-zsh-config cifs-utils perl-test-pod beep dash xf86-video-apm apr mod_fastcgi perl-event-execflow libguess libmythes pylint xf86-video-tseng mp3wrap libmowgli libfetch talloc cscope acpi jhead mod_fcgid perl-gtk2-ex-formfactory isapnptools cyrus-sasl dvdrip multitail binutils libmcs -unicode perl-html-template babl yasm pam_fprint mod_wsgi cvs aspell-ru ltrace aspell-hu python-logilab-astng udisks eric4-plugins elfutils compface sg3_utils tcpdump krb5 gnomecanvas-perl xf86-video-trident htdig fprint_demo perl-date-manip sysfsutils openmpi apache aspell-nl gtk2-perl munin libfprint perl-crypt-ssleay perl-dbd- python-logilab-common pinentry aspell-it wpa_actiond perl-dbd-mysql eric4 -agent libatasmart ortp neon aspell-es cx_freeze xf86-video-vmware valgrind slang rtmpdump bigloo aspell-en gnome-perl perl-log-log4perl tomcat-native perl-dbi +rw-tools most ruby aspell-de xf86-video- metalog libssh2 dhcp aspell-fr heirloom- python-soappy nmap wpa_supplicant_gui aspell libdrm squid virtuoso aspell-pt fastjar pcre zope-interface perl-ipc-system-simple libpciaccess iw lapack libffi python-fpconst loudmouth libssh python ssmtp dansguardian wpa_supplicant twisted perl-file-which xf86-video-ati pixman pyopenssl libnet sbcl -perl gperf wireless-regdb libmsn -perl ettercap msmtp gftp junit xf86-input-evdev xdelta pdns-recursor soprano xorg-server crda oprofile frozen-bubble speech-dispatcher maxima apache-ant swig libidn libgadu soundtouch libpcap popt socat bind libmatroska glib libtasn1 gphoto2 nvidia-173xx-utils freeciv libsasl mkvtoolnix pymad links zlib dotconf pilot-link hd2u libarchive mp3splt libebml libnl gptfdisk libetpan dovecot liblo geoip hercules kismet papyon mpd libid3tag abook id3v2 potrace perl-- libfwbuilder networkmanager-openconnect libdatrie clamav gdb -butterfly bmp-wma libthai w3m festival tcl lftp libgnome-keyring timidity++ sox efibootmgr python-markupsafe perl--parser folks libmad gtkpod libmodplug lsdvd ccache bc net-snmp libgksu networkmanager-openvpn -tools recode fwbuilder networkmanager-pptp bmp libvncserver libsigsegv pysmbc network-manager-applet id3lib freetds opencdk gnome- telepathy-gabble libvorbis libcue fortune- manedit monodevelop-debugger-gdb networkmanager-vpnc telepathy-sofiasip liblrdf libsidplay libdvdread libtool pypgsql libimobiledevice tunepimp libdca zziplib cln readline openconnect mobile-broadband-provider-info telepathy-qt4 dbus libdvdnav libmpcdec doxygen python-wpactrl pycups dbus-python telepathy-logger graphviz orbit2 polkit-gnome dssi bmp- libproxy libogg audiofile guile python2 gucharmap libbonobo telepathy-mission-control libmp3splt i8kutils -suhosin usbmuxd -access-bridge python-mpd sdl_sound libmtp unixodbc gnupg physfs kdeplasma-applets-networkmanagement telepathy-farsight ladspa libao ogmtools lua telepathy-idle rtkit perl-tk bzr python-lxml quodlibet-plugins telepathy-haze libmms darcs php rest gnome-vfs cmt vlc pkgstats libofa python-opengl python-m2crypto libevent mirage at-spi neverball faad2 ptlib libwps mysql-python devhelp python-telepathy telepathy-glib sonata -plugins octave bzip2 libqalculate pycrypto gnome--utils libgnomecups gconf-editor gnome-python quodlibet scummvmlibmpeg2 glpk python-pyspi gnome-desktop2 transcode i8kmon pyorbit sqlite3 libmng libcanberra gconf gnome-python- gnome-python-extras perl--info libcdio curl libwpd asio liblqr telepathy-salut tomcat7 libmp4v2 alsa-lib -lib cmake redland libgphoto2 python-urwid memcached startup-notification python-feedparserdesktop-file-utils tomcat6 sweep libcddb php-apc libieee1284 raptor sofia-sip libxres libsocialweb freealut orc -compat docbook-xml gnome-vfs-perl umfpack pth cups-pk-helper gnome-applets libgweather jade ogle -vlc mailman pyxml mime-types pulseaudio-alsa gnome-utils dvdauthor openjpeg asymptote gpsd thinkfinger python-pysqlite -en camsource irqbalance libwebkit gnome-panel tuxpuck raptor1 libtorrent-rasterbar python-egenix-mx-base python-geoip stardict libspectre evolution apricots moc libftdi glib-networking gnome-pilot djvulibre -ecj mp32ogg opencore-amr hpoj eclipse glib2 python2-cairo gnome-keyring libshout gsl gc hsqldb-java libgtkhtml gnome-control-center -glib -doc normalize libdvbpsi libusb openobex lucene unzip libgsf evolution-data-server libsm perl-string-shellquote wesnoth opal -common w3c-mathml2 libsoup nautilus evolution-exchange streamripper libvisual-plugins a52dec hdf5 obex-data-server libifp hunspell-ro -tools libnotify xfce4-dev-tools sdl_ttf libdc1394 freeglut brltty hunspell consolekit gnome-settings- libpst perl-file-sharedir schroedinger netcdf ksensors -devel libgdata gtkhtml4 intltool sdl_mixer swh-plugins pygobject gnome-disk-utility exempi ffmpegthumbnailer bluez claws-mail-extra-plugins libdmapsharing gnome-desktop vdpau-video obexftp libwpg lighttpd tumbler sound-theme-freedesktop gnome-- qjackctl qemu-kvm fribidi libva fcitx -encryption postgresql-old-upgrade libgpod nautilus-open-terminalmx gnome-phone-manager hplip hunspell-fr polkit libots qalculate-gtk libwnck3 libunique3 perl-xml-sax hydrogen epplet-base thunderbird wv2 libepc evolution-webcal genius gnome-session perl-xml-namespacesupport sdl gnokii eclipse-cdt gob2 libwmf gjs libice nautilus-sendto farsight2 perl-capture-tiny kradio libtheora icu lm_sensors nss libcroco hwloc bug-buddy python-pygame rubberband vde2 opencv dbus-core nspr pango libytnef python-pycurl gnome-media libgtop libvdpau qalculate-kde dbus-glib wv nicotine aubio esound lcms python-imaging -i18n libgnome gnome-menus notification-daemon xsane gnome-user-docs libgee -sharp icon-naming-utils perl-alien-sdl jack mrtg -tools libplist claws-mail gnome-icon-theme-extras libmikmod bluez-hcidump accountsservice xorg-iceauth gstreamer0.10mod_dnssd libxvmc xvidcore xmlsec gdm gmetadom libnice arora sdl_image v4l-utils firefox python-notify gnome-power-manager xf86-video-openchrome libupnp streamtuner gnome-video-effects lbreakout2 gstreamer0.10-python -introspection gnome-alsamixer tidyhtml texlive-genericextra sdl_net pstoedit psutils sane libidl2 media-player-info gnome- gtk--engine smpeg alsa-oss texlive-bin gtkmathview pywebkitgtk gok ggv libgnomeprintui vamp-plugin-sdk libjpeg-turbo kdelibs3 yelp gtk2libart-lgpl vala libisofs gnome-user-share libmusicbrainz3 texlive-publishers slv2 cups xchat gdome2 libgnomemm libgnomekbd konq-plugins texlive- libsamplerate crypto++ a2ps gqview perl-xml-simple dasher pathological libavc1394 t1lib docbook-xsl libgnome-media-profilesgtk3 libisoburn texlive-fontsextra sdl_pango latex2rtf python-cairo yelp-xsl libxml++ mutagen gnome-speech iso-codes texlive-langcyrillic perl-tie-simple gd cairo libgnomeprint docbook-mathml gstreamer0.10-ffmpeg mail-notification ghex alsa-plugins qtcurve-kde3 purple-plugin- sound-juicer libbonoboui texlive-pictures texlive-games sdl_gfx gtk--engine gcin libbeagle texlive-formatsextra lv2core amule cups- psiconv libgnomecanvas libass gnome-spell libofx pyrex gnome-screensaver rasqal libburn orca wesnoth-data rdesktop mjpegtools ed jasper gutenprint xz scribus mahjong texlive-langcjk perl-sdl wxmaxima gtksourceview3 gdl libgnomeui gnome-mag texlive- libraw1394 libpano13 pidgin gnome-mime-data texlive-langgreek libdv wxgtk usbview xfce-utils vte gtkhtml texlive-htmlxml -proto libzvt autogen gtksourceview2 pavucontrol texlive-langextra texlive-core enca chemtoolshared-mime-info gmime pyxdg libxcb openbabel poppler-data gnucash totem-plparser gnome-js-common texlive-plainextra libiec61883 -demos glade pygtksourceview2 libpeas gcalctool python-beaker xchm -web aiksaurus gv eog pyatspi texlive-latexextra xcb-util keytouch-editor qtcurve-gtk2 vcdimager xournal gtkmm3 texlive-humanities xorg-xwininfo libffado gtkspell libunique slib trayer gnome-terminal mpfr p7zip libgnomecanvasmm xorg-xlsatoms avogadro libgda racket texlive-science dvgrab habak swt oxygen-gtk gtk-vnc gnome-vfsmm qiv perl-exiftool gimp-gap gimp-dbp file-roller xorg-xlsclients ilmbase lablgtk2 gnet libgnomeuimm texlive-bibtexextra xorg- feh autopano-sift-c libglade sane-frontends eog-plugins cairomm libfontenc giblib rox gsettings-desktop-schemas gnome-system-monitor python-mako libcaca gegl gnome-games-extra-data libchamplain libxmi gsf-sharp unrar libglademm transfig enblend-enfuse kwebkitpart evolution-sharp gstreamer0.10-ugly totem xorg-mkfontscale chmlib gimp-refocus xfce4-mixer scrot qjson kdiff3 lcms2 epiphany libsigc++ glew gweled gnome-color-manager mousetweaks pangomm libxau taglib-extras xfburn gnome-tweak-tool atkmm xproto imlib2 glproto liborigin2 qwt shared-desktop-ontologies at-spi2-core gimp texmacs xaw3d kdebase-runtime gnome-games -gst libstroke gstreamer0.10-base gconfmm libxdmcp mesa libmygpo-qt kdepim-runtime gnome-themes-extras exiv2 glibmm libfs imlib spassgen gnome-themes- -fonts gnome- -crystal qt3-doc polkit-qt at-spi2-atk clutter-gtk2 paprefs xorg- libgdiplus x2x kdelibs -icon-theme freetype2 liblastfm qca smb4k gtk-engines fvwm kdepimlibs goffice clutter opensp xorg-bdftopcf kobodeluxe zvbi dri2proto qt3 automoc4 libmpd opengl-man- attica libxss -pixbuf2 xfce4-appfinder libxfont stellarium povray libical xkeyboard-config audacious foobillard xf86-input-synaptics grantlee xfce4-xkb-plugin gstreamer0.10-bad xfce4-quicklauncher-plugin gtk hylafax libxtst libqzeitgeist oxygen-icons kipi-plugins licq epiphany-extensions fontsproto lablgtk windowmaker-extra xorg-xinput libsexy atk xfce4-mpc-plugin python-gdata giflib libxklavier gnome-icon-theme-symbolic latex2html dbus-qt3 qt-doc scrnsaverproto gmpc gstreamer0.10-good xfce4-mount-plugin

windowmaker http://www.toofishes.net/blog/arch-package-visualization/ smplayer-themes qsynth archlinux-menus clutter-gtk xfce4-battery-plugin keytouch orage xfce4-time-out-plugin cagibi xfce4-genmon-plugin fbida vigra recordproto gsfonts polkit-kde libxfce4ui xfce4-cpufreq-plugin gif2png printproto qtscriptgenerator xfconf xfce4-weather-plugin xfce4-panel libtiff qtcurve-kde4 xfce4-dict libpng openjdk6 ntrack psi libxfce4util glhack qwtplot3d x11vnc libxp libxi xbill xdg-utils xfce4-systemload-plugin xfce4-fsguard-plugin ca-certificates qt-assistant-compat qca-ossl xfce4-netload-plugin xf86-input-wacom inputproto qscintilla libxfce4menu xfce4-timer-plugin xfce4-power-manager opengtl libxrandr libdbusmenu-qt thunar-media-tags-pluginhicolor-icon-theme evilwm qca-gnupg xfce4-settings xfce4-notes-plugin ddd pekwm libktorrent qimageblitz xfce4-wavelan-plugin allegro libxft phonon thunar-volman xfce4-eyes-plugin randrproto exo xfce4-mailwatch-plugin devilspie ca-certificates-java nxclient xorg-xsetrootlibxcursor kshutdown basket gecko-sharp-2.0 garcon xine-ui monica qt xfce4-diskperf-plugin slim monodevelop xfce4-cpugraph-plugin bochs libdmtx libxfcegui4 xfwm4-themes liquidwar damageproto bluedevil uim thunar-archive-plugin xfce4-notifyd ttf-ubraille xorg-xbacklight xorg-xauth fixesproto nx-common xorg-xbiff -sharp xfce4-verve-plugin xfce4-sensors-plugin xfce4-session xorg-fonts-alias xorg-xcursorgen kdebase-workspace -addins xf86dgaproto xorg-oclock libbluedevil xfce4-clipman-plugin ttf-linux-libertine xorg-xmessage nitrogen libxxf86vm windowmaker-crm-git scim-uim notify-sharp-svn xfce4-screenshooter xfce4-taskmanager ttf-bitstream-vera slim-themes anthy xfwm4 xorg-mkfontdir libxxf86dga libxfixes xorg- xfce4-smartbookmark-plugin libwnck xf86vidmodeproto libxv mono-zeroconf fontconfigxorg-fonts-cyrillic libxcomposite libxevie gtkimageview gdata-sharp nxserver boo gnome-sharp ristretto xorg-fonts-100dpi libxdamage xorg-sessreg libexif ttf-thai videoproto xorg-x11perf libxaw libotf xfdesktop ttf-cheapskate xextproto tightvnc gtk-sharp-beans xfce4-datetime-plugin oxine ttf-freefont f-spot ttf-hannom xcompmgr vice gimp- taglib-sharp xorg-fonts-75dpi xawtv xorg-xvinfo m17n-lib gudev-sharp ttf-sazanami ttf-fireflysung ttf-freebanglafont xsnow libxpm ttf-arphic-uming libxineramaxbitmaps gtk-sharp-2 flickrnet cmatrix xorg-xdpyinfo xorg-xcalc font-misc-ethiopic artwiz-fonts xorg-xvidtune expect xorg-xwud gkeyfile-sharp m17n-db freenx xorg-xcmsdb ttf-dejavu ttf-mph-2b-damase compositeproto xineramaproto xorg-fonts-type1 ttf-khmer xorg-apps libxext dejagnu ttf-baekmuk xorg-xdriinfo aterm xorg-smproxy kdevelop-pg-qt xorg-fonts-misc ttf- xorg-xev font-bitstream-speedo xorg-xeyes font-misc-meltho renderproto xorg-xkbutils xorg-xfontsel kdevplatform xorg-fonts-encodings libxrender xorg-xkill xorg-xpr xorg-xmodmap gluezilla font-bh-ttf kdevelop-php mono eric-plugins xorg-xload xorg- xerces2-java eric xorg-font-utils xorg-xgamma gifsicle libx11 xorg-appres ttf-arphic-ukai xorg-xlogo xmahjongg ttf-tibetan-machine ndesk-dbus-glib xorg- xorg-xmag xorg-xlsfonts bdf-unifont xorg-xman gettext-mono ttf-indic-otf xorg-xhost mono-tools xorg-xclock xorg-xedit xorg-xrefresh xorg- mcpp gnome-desktop-sharp xalan-java libxt mono-basic gtkglextmm xorg-xprop gnome-keyring-sharp fluxter gtkglext ndesk-dbus xorg-xconsole perl-file-desktopentry xorg-xfd kbproto perl-file-mimeinfo xorg-xset ftgl libxkbui libxmu xorg-xrdb xorg-xkbcomp xorg-xrandr perl-file-basedir xclip xorg-xclipboard libxkbfile xorg-xkbevd

libdmx scim-anthy xorg-setxkbmap scim- -cyrillic dmxproto libhangul scim-m17n scim xpdf-korean xpdf-turkish scim-chewing monodevelop-debugger-mdb xpdf-chinese-simplified xpdf scim-tables xpdf-thai xpdf-greek xpdf-latin2 scim-pinyinlibchewing mono-debugger xpdf-japanese George Candea xpdf-chinese-traditional Principles of Computer Systems xpdf-arabic 5 xpdf-hebrew Symptom #2: Many Interconnections

srcpac

abs devtools ypserv perl-io-stringyperl-mailtools openslp mdadm namcap memtest86+ v86d ppp grub gzip rsync perl-mime-tools snarf rp-pppoe grub2-efi-x86_64 ifenslave perl-convert-binhex fcpci xf86-video-nouveau screen capi4k-utils sed sshfs tiacx-firmware initscripts nilfs-utils python-iwscan isdn4k-utils lirc pptpclient mtools grep nano snd modemmanager dmraid nvidia-utils wireless_tools linux-firmware licenses bridge-utils cpio ntp perl-bit-vector perl-mime-lite nouveau-firmware procps perl-digest-nilsimsa kernel26 btrfs-progs-unstable ossp perl-carp-clan fcpcmcia ode yp-tools iproute2 ddrescue acl xf86-video-v4l b43-fwcutter nouveau-drm-lts nvidia-lts rfkill mkpxelinux rpcbind lzop perl-digest-hmac perl-mail-spf perl-mime-typesperl-email-date-format kbd sdparm parted perl-io-socket-ssl archboot minicom nfsidmap lvm2 udev hwdetect razor module-init-tools zd1211-firmware iptables pm-utils nvidia hddtemp bittorrent reiserfsprogs perl-soap-lite librpcsecgss perl-net-dns chkrootkit libmspack ipw2200-fw pcmciautils webmin perl-class-inspector pacman nvidia-173xx which fam fsarchiver spamassassin util-linux xf86-input-keyboard libdiscid linux-api-headers lzo2 perl-libwww re2c xf86-video-glint fuse ipw2100-fw gnu-netcat net-tools c-ares dhcpcd perl-passwd-md5 nfs-utils dosfstools perl-net-ip findutils syslinux usermin perl-digest-sha1 speedtouch lxsplit libtirpc ypbind-mt e2fsprogs perl-html-parser pacman-mirrorlistbash xf86-video-mach64 mkisolinux linux-atm partitionmanager perl-html-tagset tar mpck mksyslinux groff libgssglue networkmanager source-highlight gparted mkinitcpio perl-uri hdparm pyalpm kexec-tools xf86-video-unichrome xfsprogs mkbootcd enscript rssh xf86-video-rendition mkinitcpio-nfs-utils fping tree gksu lilo libirman libui-sh xf86-video-chips shadow dcron netcfg ethtool gpart haskell-http sysvinit gawk acpid wipe ghc tzdata jfsutils perl-template-toolkit ifplugd xf86-video-cirrus kernel26-lts iana-etc usbutils mkinitcpio-busybox progsreiserfs vpnc filesystem haskell-fgl lcab dmapi laptop-mode-tools haskell-transformers xf86-video-mga catdoc pdksh perl-appconfig haskell-opengl vim diffutils cdargs haskell-network di vim-buftabs testdisk aif haskell-regex-compat man-db mlocate link-grammar avfs dcfldd coreutils xf86-video-ark haskell-parallel sudo ftjam proftpd haskell-quickcheck haskell-text mtx qhull liboil gpm libvisual hexedit fakeroot haskell-regex-base xf86-video-sis glibc inetutils libdaemon libmpdclient haskell-regex-posix muparser xf86-video-dummy bftpd libcap haskell-stm libcdaudio pkg-config haskell-platform haskell-deepseq dvdrtools xf86-input-aiptek at attr xf86-video-xgi less docker tdb lzo perl-locale-gettext haskell-zlib make time run-parts gnome-nettool haskell-haskell-src netkit-bsd-finger whois haskell-cgi xf86-input-vmmouse pam_ldap haskell-hunit cpufrequtils perl-libintl-perl mpc samba quota-tools bison xf86-video-neomagic haskell-syb cloog nasm tcp_wrappers tftp-hpa sharutils haskell-glut isl cfitsio George Candea libtextcat xinetd Principles of Computer Systems haskell-html xf86-video-fbdev cd-discid flex bitlbee 6 schedtool cronie glsof gettext cabal-install xf86-video-sisusb cracklib xf86-video-ast help2man fssos-nsvs xf86-video-s3virge haskell-xhtml libmpc xf86-video-xgixp logrotate vsftpd bin86 mod_perl python-pip haskell-parsec file diffstat libasyncns syslog-ng m4 gcc watchdog procmail imap irssi psmisc barcode pam xf86-input-joystick convmv python-distribute haskell-mtl ecl xf86-video-savage xf86-video-i128 perl-unicode-string sysklogd lsof srm python-virtualenv happy xaos mhash emovix subversion unison xf86-video-tdfx ncmpc eventlog perl-error dnsutils python-nose xf86-video-nv zile gpgme silc-toolkit ppl capi4hylafax libindi ggz-client-libs mcrypt perl-event libnova iputils libiodbc bash-completion xf86-video-i740 erlang setserial gmp libpipeline mt-st dmidecode perl-time-hires xf86-input-acecad cryptsetup xf86-video-siliconmotion perlperl-text-iconv idnkit iptraf-ng libedit linux_logo hyphen procinfo-ng wget gnupg2 pdns perl-net-upnp strace alex gen-init-cpio ncftp xf86-video-r128 libgcrypt xf86-input-mouse libldap imake hspell ispell lpsolve libmcrypt cowsay glade-perl perl-term-readkey libgpg-error squirrelmail xf86-input-void xf86-video-s3 hal re-alpine perl-fcgi cvsps naim eject patch apr-util perl-net-ssleay pm-quirks aalib mtr libggz gnugo pciutils git hal-info libassuan postfix xsp glib-perl fbset pmount gnuchess xf86-video-vesa libotr perl-netaddr-ip davfs2 xmlto libksba zsh keyutils vi figlet nss-mdns openldap db ocaml ncurses nss_ldap gconf-perl alsa-utils pwgen gsm xf86-video-voodoo mod_mono perl-anyevent storage-fixup indent cyrus-sasl-plugins lensfun htop dirmngr gdbm perl-yaml-syck ethstatus dnsmasq grml-zsh-config cifs-utils perl-test-pod beep dash xf86-video-apm apr mod_fastcgi perl-event-execflow libguess libmythes pylint xf86-video-tseng mp3wrap libmowgli libfetch talloc dialog cscope acpi jhead mod_fcgid perl-gtk2-ex-formfactory isapnptools ctags cyrus-sasl dvdrip multitail binutils libmcs rxvt-unicode perl-html-template babl yasm pam_fprint mod_wsgi cvs aspell-ru ltrace openssh llvm bogofilter aspell-hu python-logilab-astng udisks mysql eric4-plugins elfutils compface sg3_utils tcpdump krb5 gnomecanvas-perl xf86-video-trident htdig fprint_demo perl-date-manip sysfsutils openmpi apache aspell-nl gtk2-perl munin libfprint perl-crypt-ssleay perl-dbd-sqlite python-logilab-common pinentry sip aspell-it wpa_actiond perl-dbd-mysql eric4 kde-agent libatasmart ortp neon aspell-es cx_freeze xf86-video-vmware valgrind slang rtmpdump bigloo aspell-en gnome-perl perl-log-log4perl tomcat-native perl-dbi dvd+rw-tools most ruby openssl aspell-de xf86-video-intel metalog libssh2 dhcp aspell-fr lynx heirloom-mailx python-soappy cdrkit nmap wpa_supplicant_gui aspell libdrm squid virtuoso aspell-pt fastjar pcre zope-interface perl-ipc-system-simple libpciaccess texinfo iw lapack libffi python-fpconst loudmouth libssh python ssmtp dansguardian wpa_supplicant twisted perl-file-which xf86-video-ati pixman pyopenssl libnet sbcl pango-perl gperf wireless-regdb libmsn cairo-perl ettercap msmtp openvpn gftp junit xf86-input-evdev xdelta pdns-recursor fetchmail soprano xorg-server ocrad crda oprofile frozen-bubble speech-dispatcher maxima apache-ant swig libidn libgadu soundtouch libpcap popt socat bind audacity libmatroska glib libtasn1 weechat gphoto2 nvidia-173xx-utils freeciv libsasl mkvtoolnix pymad links mutt zlib dotconf pilot-link hd2u libarchive mp3splt libebml libnl gptfdisk libetpan dovecot liblo geoip hercules kismet papyon mpd libid3tag abook easytag faac id3v2 potrace perl-compress-bzip2 libfwbuilder networkmanager-openconnect libdatrie clamav gnutls gdb telepathy-butterfly ecasound bmp-wma libthai w3m festival tcl lftp expat libgnome-keyring timidity++ sox efibootmgr gnuplot python-markupsafe perl-xml-parser folks libmad gtkpod libmodplug lsdvd ccache bc net-snmp libgksu networkmanager-openvpn vorbis-tools recode fwbuilder networkmanager-pptp rosegarden bmp libvncserver libsigsegv r pysmbc network-manager-applet empathy id3lib taglib freetds opencdk gnome-bluetooth telepathy-gabble libvorbis flac libcue fortune-mod manedit monodevelop-debugger-gdb networkmanager-vpnc telepathy-sofiasip liblrdf libsidplay libdvdread libtool pypgsql postgresql libimobiledevice tunepimp fluidsynth libdca zziplib cln readline openconnect mobile-broadband-provider-info telepathy-qt4 dbus libdvdnav libmpcdec doxygen python-wpactrl pycups dbus-python telepathy-logger musicbrainz graphviz orbit2 polkit-gnome dssi bmp-musepack mercurial libproxy libogg audiofile grip guile python2 gucharmap libbonobo telepathy-mission-control k3b libmp3splt x264 i8kutils php-suhosin usbmuxd java-access-bridge python-mpd sdl_sound libmtp libdvdcss unixodbc gnupg physfs boost kdeplasma-applets-networkmanagement telepathy-farsight ladspa libao ogmtools tk lua telepathy-idle rtkit perl-tk bzr python-lxml terminal quodlibet-plugins liferea telepathy-haze cdrdao cmus libmms darcs php libxslt rest gnome-vfs wicd cmt libvpx vlc pkgstats libofa python-opengl python-m2crypto libevent mirage at-spi neverball faad2 ptlib libwps clisp mysql-python devhelp python-telepathy telepathy-glib sonata audacious-plugins octave bzip2 libqalculate pycrypto gnome-doc-utils libgnomecups gconf-editor gnome-python quodlibet scummvmlibmpeg2 ffmpeg glpk python-pyspi avahi gnome-desktop2 transcode i8kmon pyorbit sqlite3 libmng libcanberra gconf gnome-python-desktop gnome-python-extras perl-mp3-info speex libcdio curl libwpd asio liblqr telepathy-salut tomcat7 libmp4v2 alsa-lib xine-lib cmake redland libgphoto2 python-urwid inkscape memcached startup-notification python-feedparserdesktop-file-utils tomcat6 sweep wavpack libcddb php-apc libieee1284 raptor sofia-sip libxres libsocialweb freealut orc libusb-compat docbook-xml vino gnome-vfs-perl pulseaudio umfpack pth cups-pk-helper ekiga gnome-applets libgweather jade ogle phonon-vlc fftw mailman pyxml mime-types pulseaudio-alsa gnome-utils openal dvdauthor openjpeg asymptote gpsd thinkfinger python-pysqlite hunspell-en camsource irqbalance libwebkit gnome-panel tuxpuck qemu k9copy raptor1 libtorrent-rasterbar python-egenix-mx-base python-geoip stardict libspectre evolution apricots moc libftdi rarian glib-networking gnome-pilot djvulibre eclipse-ecj mp32ogg opencore-amr hpoj eclipse glib2 python2-cairo gnome-keyring libshout gsl gc hsqldb-java libgtkhtml gnome-control-center json-glib evince gtk-doc normalize libdvbpsi libusb openobex lucene unzip libgsf evolution-data-server libsm perl-string-shellquote wesnoth blender opal mozilla-common w3c-mathml2 libsoup nautilus seahorse evolution-exchange streamripper libvisual-plugins a52dec hdf5 obex-data-server libifp libreoffice hunspell-ro ocfs2-tools cheese libnotify xfce4-dev-tools sdl_ttf libdc1394 freeglut brltty hunspell consolekit gnome-settings-daemon libpst perl-file-sharedir schroedinger netcdf ksensors gimp-devel libgdata gtkhtml4 intltool sdl_mixer cdparanoia swh-plugins pygobject gnome-disk-utility exempi ffmpegthumbnailer bluez beanshell xulrunner claws-mail-extra-plugins libdmapsharing metacity gnome-desktop lame vdpau-video obexftp libwpg lighttpd tumbler sound-theme-freedesktop gnome-icon-theme qjackctl qemu-kvm fribidi libva fcitx pidgin-encryption postgresql-old-upgrade libgpod nautilus-open-terminalmx gnome-phone-manager mplayer hplip hunspell-fr polkit libots qalculate-gtk libwnck3 libunique3 perl-xml-sax hydrogen epplet-base thunderbird wv2 libepc evolution-webcal genius gnome-session automake perl-xml-namespacesupport sdl gnokii eclipse-cdt gob2 libwmf gjs libice nautilus-sendto farsight2 perl-capture-tiny kradio libtheora icu lm_sensors nss libcroco hwloc midori mutter bug-buddy python-pygame rubberband vde2 opencv dbus-core chromium nspr pango libytnef python-pycurl gnome-media libgtop libvdpau qalculate-kde dbus-glib wv nicotine aubio libsndfile esound lcms python-imaging firefox-i18n seamonkey libgnome gnome-menus notification-daemon xsane gnome-user-docs libgee webkit-sharp icon-naming-utils perl-alien-sdl jack mrtg ebook-tools libplist claws-mail gnome-icon-theme-extras libmikmod labplot bluez-hcidump accountsservice xorg-iceauth gstreamer0.10mod_dnssd bzflag libxvmc xvidcore xmlsec gdm gmetadom gvfs libnice arora sdl_image v4l-utils dcraw imagemagick firefox libxml2 python-notify zenity gnome-power-manager ardour xf86-video-openchrome libupnp gnumeric streamtuner gnome-video-effects lbreakout2 ghostscript rrdtool gstreamer0.10-python gobject-introspection gnome-alsamixer tidyhtml texlive-genericextra sdl_net mpg123 pstoedit psutils sane libidl2 upower libzip media-player-info gnome-shell gtk-qt-engine smpeg alsa-oss texlive-bin gtkmathview pygtk pywebkitgtk gok ggv libgnomeprintui vamp-plugin-sdk libjpeg-turbo kdelibs3 yelp gtk2libart-lgpl vala libisofs gnome-user-share libmusicbrainz3 texlive-publishers slv2 cups xchat fontforge gdome2 libgnomemm libgnomekbd konq-plugins texlive-pstricks libsamplerate crypto++ a2ps gqview perl-xml-simple dasher pathological libavc1394 t1lib docbook-xsl libgnome-media-profilesgtk3 libisoburn geeqie texlive-fontsextra sdl_pango latex2rtf python-cairo yelp-xsl libxml++ mutagen gnome-speech iso-codes texlive-langcyrillic perl-tie-simple kino gd cairo libgnomeprint docbook-mathml gstreamer0.10-ffmpeg mail-notification ghex alsa-plugins qtcurve-kde3 purple-plugin-pack sound-juicer libbonoboui texlive-pictures texlive-games sdl_gfx gtk-xfce-engine gcin libbeagle texlive-formatsextra lv2core amule cups-pdf psiconv leafpad akonadi miro libgnomecanvas libass gnome-spell libofx pyrex gnome-screensaver rasqal libburn orca wesnoth-data rdesktop mjpegtools ed jasper gutenprint xz scribus mahjong rhythmbox texlive-langcjk perl-sdl wxmaxima gtksourceview3 gdl libgnomeui gnome-mag texlive-music libraw1394 libpano13 truecrypt pidgin gnome-mime-data brasero dconf texlive-langgreek libdv wxgtk usbview anjuta xfce-utils vte gtkhtml texlive-htmlxml xcb-proto libzvt autogen gtksourceview2 pavucontrol texlive-langextra texlive-core enca poppler chemtoolshared-mime-info gmime zip pyxdg libxcb openbabel poppler-data enchant gnucash totem-plparser gnome-js-common texlive-plainextra libiec61883 mesa-demos emelfm2 glade pygtksourceview2 libpeas gcalctool python-beaker xchm icedtea-web aiksaurus gv eog gedit pyatspi texlive-latexextra xcb-util wxpython keytouch-editor qtcurve-gtk2 vcdimager xournal gtkmm3 texlive-humanities xorg-xwininfo libffado hugin gtkspell libunique slib bluefish trayer gnome-terminal mpfr p7zip libgnomecanvasmm kile xorg-xlsatoms avogadro openexr libgda racket seed texlive-science dvgrab habak swt oxygen-gtk gtk-vnc xarchiver gnome-vfsmm deluge qiv perl-exiftool gimp-gap gimp-dbp file-roller xorg-xlsclients ilmbase lablgtk2 fyre gnet vinagre libgnomeuimm texlive-bibtexextra xorg-luit feh autopano-sift-c libglade sane-frontends eog-plugins cairomm libfontenc giblib rox gsettings-desktop-schemas gnome-system-monitor python-mako libcaca gegl gnome-games-extra-data libchamplain libxmi gsf-sharp unrar libglademm transfig enblend-enfuse kwebkitpart evolution-sharp gstreamer0.10-ugly totem gtkmm xorg-mkfontscale chmlib gimp-refocus xfce4-mixer scrot qtiplot qjson kdiff3 lcms2 epiphany libsigc++ glew gweled gnome-color-manager mousetweaks pangomm libxau taglib-extras beagle xfburn gnome-tweak-tool atkmm xproto imlib2 glproto liborigin2 qwt shared-desktop-ontologies at-spi2-core gimp strigi texmacs xaw3d kdebase-runtime abiword gnome-games clutter-gst libstroke krusader gstreamer0.10-base arj gconfmm libxdmcp mesa libmygpo-qt kdepim-runtime gnome-themes-extras exiv2 glibmm libfs imlib spassgen gnome-themes-standard cantarell-fonts gnome-blog fvwm-crystal qt3-doc polkit-qt digikam at-spi2-atk clutter-gtk2 paprefs xorg-xfs libgdiplus x2x kdelibs tango-icon-theme gthumb freetype2 liblastfm qca smb4k gtk-engines fvwm xfig kdepimlibs goffice clutter opensp xorg-bdftopcf kobodeluxe zvbi dri2proto qt3 automoc4 konversation libmpd attica libxss librsvg xfce4-appfinder libxfont opengl-man-pages povray lyx xkeyboard-config gdk-pixbuf2 audacious stellarium foobillard libical smplayer xf86-input-synaptics grantlee licq xfce4-xkb-plugin gstreamer0.10-bad xfce4-quicklauncher-plugin fontsproto gtk hylafax libxtst libqzeitgeist oxygen-icons kipi-plugins epiphany-extensions xfce4-mpc-plugin lablgtk windowmaker-extra xorg-xinput libsexy atk gnome-icon-theme-symbolic python-gdata latex2html giflib putty amarok scrnsaverproto libxklavier windowmaker dbus-qt3 qt-doc gmpc gstreamer0.10-good xfce4-mount-plugin smplayer-themes qsynth archlinux-menus clutter-gtk gajim xfce4-battery-plugin plotutils keytouch kaffeine orage xfce4-time-out-plugin netpbm graphicsmagick cagibi xfce4-genmon-plugin fbida vigra recordproto gsfonts polkit-kde libxfce4ui xfce4-cpufreq-plugin gif2png printproto qtscriptgenerator xfconf xfce4-weather-plugin xfce4-panel libtiff qtcurve-kde4 xfce4-dict libpng openjdk6 ntrack psi libxfce4util glhack qwtplot3d x11vnc libxp libxi xbill xdg-utils thunar xfce4-systemload-plugin xfce4-fsguard-plugin nedit ca-certificates qt-assistant-compat qca-ossl xfce4-netload-plugin xf86-input-wacom inputproto qscintilla libxfce4menu xfce4-timer-plugin xfce4-power-manager opengtl libxrandr fluxbox libdbusmenu-qt thunar-media-tags-pluginhicolor-icon-theme evilwm pyqt qca-gnupg xfce4-settings xfce4-notes-plugin ddd pekwm libktorrent qimageblitz xfce4-wavelan-plugin allegro libxft phonon thunar-volman xfce4-eyes-plugin randrproto emacs exo xfce4-mailwatch-plugin devilspie lesstif ca-certificates-java nxclient xorg-xsetrootlibxcursor kshutdown basket gecko-sharp-2.0 garcon xine-ui monica qt xfce4-diskperf-plugin slim ktorrent monodevelop xfce4-cpugraph-plugin bochs libdmtx libxfcegui4 xfwm4-themes liquidwar damageproto bluedevil uim thunar-archive-plugin xfce4-notifyd ttf-ubraille xorg-xbacklight xorg-xauth fixesproto icewm nx-common xorg-xbiff gio-sharp xfce4-verve-plugin xfce4-sensors-plugin xfce4-session xorg-fonts-alias xorg-xcursorgen kdebase-workspace mono-addins xf86dgaproto xorg-oclock libbluedevil xfce4-clipman-plugin ttf-linux-libertine xorg-xmessage conky banshee nitrogen libxxf86vm windowmaker-crm-git scim-uim notify-sharp-svn xfce4-screenshooter xfce4-taskmanager ttf-bitstream-vera enlightenment slim-themes ratpoison anthy xfwm4 xorg-mkfontdir libxxf86dga libxfixes xorg-xdm xfce4-smartbookmark-plugin libwnck xf86vidmodeproto libxv fltk mono-zeroconf fontconfigxorg-fonts-cyrillic libxcomposite libxevie gtkimageview gdata-sharp nxserver boo gnome-sharp ristretto xorg-fonts-100dpi libxdamage xorg-sessreg libexif ttf-thai videoproto xorg-x11perf libxaw libotf xfdesktop ttf-cheapskate xextproto tightvnc gtk-sharp-beans xfce4-datetime-plugin oxine ttf-freefont f-spot ttf-hannom xcompmgr vice gimp-ufraw taglib-sharp xorg-fonts-75dpi xawtv xorg-xvinfo m17n-lib xterm gudev-sharp ttf-sazanami ttf-fireflysung ttf-freebanglafont xsnow libxpm ttf-arphic-uming xmms libxineramaxbitmaps gtk-sharp-2 flickrnet cmatrix xorg-xdpyinfo xorg-xcalc font-misc-ethiopic artwiz-fonts xorg-xvidtune expect xorg-xwud kdevelop gkeyfile-sharp m17n-db freenx xorg-xcmsdb tomboy ttf-dejavu ttf-mph-2b-damase compositeproto xineramaproto xorg-fonts-type1 ttf-khmer xorg-apps libxext dejagnu ttf-baekmuk xorg-xdriinfo aterm xorg-smproxy kdevelop-pg-qt xorg-fonts-misc ttf-junicode xorg-xev font-bitstream-speedo xorg-xeyes font-misc-meltho renderproto xorg-xkbutils xorg-xfontsel kdevplatform xorg-fonts-encodings libxrender xorg-xkill xorg-xpr xorg-xmodmap gluezilla font-bh-ttf kdevelop-php mono eric-plugins xorg-xload xorg-xinit xerces2-java eric xorg-font-utils xorg-xgamma gifsicle libx11 xorg-appres muine ttf-arphic-ukai xorg-xlogo xmahjongg ttf-tibetan-machine ndesk-dbus-glib xorg-twm xorg-xmag xorg-xlsfonts bdf-unifont xorg-xman gettext-mono ttf-indic-otf xorg-xhost mono-tools xorg-xclock xorg-xedit xorg-xrefresh xorg-xwd mcpp gnome-desktop-sharp xalan-java cinepaint libxt mono-basic xscreensaver gtkglextmm xorg-xprop gnome-keyring-sharp fluxter gtkglext ndesk-dbus xorg-xconsole perl-file-desktopentry xorg-xfd kbproto perl-file-mimeinfo xorg-xset celestia ftgl libxkbui libxmu xorg-xrdb xorg-xkbcomp xorg-xrandr perl-file-basedir xclip xorg-xclipboard libxkbfile xorg-xkbevd

libdmx scim-anthy xorg-setxkbmap scim-hangul xpdf-cyrillic dmxproto libhangul scim-m17n scim xpdf-korean xpdf-turkish scim-chewing monodevelop-debugger-mdb xpdf-chinese-simplified xpdf scim-tables xpdf-thai xpdf-greek xpdf-latin2 scim-pinyinlibchewing mono-debugger xpdf-japanese xpdf-chinese-traditional xpdf-hebrew xpdf-arabic Symptom #3: Irregularity and Exceptions http://www.wallpapers-backgrounds.net Images from http://dreamstime.com and and http://dreamstime.com from Images

George Candea Principles of Computer Systems 7 Symptom #4: High “Kolmogorov Complexity”

|AAAAAAA ... AAAAB| = 106+1 K(AAAAAAA ... AAAAB) = |“1 million As followed by 1 B”| • Kolmogorov complexity simple • computation resources needed to specify an object ⇒ • minimal length of a description of the object • K(object) >= |object| => complex |ABDAGHDBBCAD...| = 106+1 K(object) << |object| => simple K(ABDAGHDBBCAD...) = 106+1 ⇒ complex

George Candea Principles of Computer Systems 8 Symptoms of Complexity

Front view • Four symptoms of complexity • large number of components of instructor • large number of interconnections • many irregularities and exceptions • high “Kolmogorov complexity”

George Candea Principles of Computer Systems 9 Properties of Computer Systems

Prof. George Candea School of Computer & Communication Sciences Computer Systems

What is a Computer System ? • A system is ... • a group of interconnected components that exhibits an A group of interconnected Environment expected collective behavior observed at the interfaces components that exhibits System with its environment an expected collective • Good system design ⇒ behavior observed at the interfaces with its • predict system behavior from component- behaviors environment. • Elemental components are often complex Interface • a component is itself a (sub)system

George Candea Principles of Computer Systems 3

George Candea Principles of Computer Systems 2 Computer Systems

• A system is ... • a group of interconnected components that exhibits an expected collective behavior observed at the interfaces with its environment • Good system design ⇒ • predict system behavior from component-level behaviors • Elemental components are often complex • a component is itself a (sub)system

George Candea Principles of Computer Systems 2 Component vs. System

• Four distinguishing characteristics • emergent properties • propagation of effects • incommensurate scaling • inevitable trade-offs

George Candea Principles of Computer Systems 3 #1: Emergent Properties

Properties that are not evident in the components, but appear when the components are combined.

George Candea Principles of Computer Systems 4 #2: Propagation of Effects The transitivity of component interconnections causes a local phenomenon to propagate to large parts of the system.

George Candea Principles of Computer Systems 5 #3: Incommensurate Scaling As a system increases in size or speed, different parts scale unequally, causing the system as a whole to stop working.

• Reason • Scalability of each component is described by a function • The order of these functions is not the same for each component ⇒ as system grows, components scale disproportionally to each other

George Candea Principles of Computer Systems 6 #3: Incommensurate Scaling As a system increases in size or speed, different parts scale unequally, causing the system as a whole to stop working.

• Reason • Scalability of each component is described by a function • The order of these functions is not the same for each component ⇒ as system grows, components scale disproportionally to each other

George Candea Principles of Computer Systems 6 #4: Trade-Offs Designing a system consists of trading off properties against each other so as to maximize the system’s overall utility. • every system property has a utility curve • a given design ties utility curves to each other • configurations, implementations, and inputs each fix a point along the utility curve

1 1 1

Quality [%] Availability [%] Security [EAL] 0 100 0 98 100 0 1 2 3 4 5 6 7

1 1 1

Max. Latency [sec] Min. Throughput [ops/sec] TCO [$/year] 0 0.1 8 11 0 1000 2000 0 1M 3M

George Candea Principles of Computer Systems 7 Figure 1. Normalized utility functions for an example online banking application.

Other possible quantifications of security include a sim- be able to correctly compare utilities throughout the design ple set containment approach, in which higher levels of se- space. curity incorporate a larger set of security precautions in- Utility functions can be specified at various levels of de- cluded in the system. Another approach, depending on tail, from qualitative graphs to precise quantitative func- the application, is to quantify security according to cryp- tions. The right level of detail is generally obtained at the tographic key sizes [17]. [20] proposes a way to evaluate end of an iterative process, in which utility functions are and quantify the security of storage systems. successively refined. The general approach we propose for Performance is usually viewed as an expression of the building these utility functions is to choose salient points throughput and latency of access. For a general banking ser- and then qualitatively interpolate between them. vice we may want to consider both read and update through- In this example, the formula for combining utilities is put/latency and perhaps even differentiate based on the par- simply a multiplication. ticular data set being accessed. However, in this example Quality: Certain applications, such as large search en- we will only look at a general measure of overall through- gines, routinely reduce completeness of their answers [5], put and latency. The performance axes have a continuous that, however, would be unacceptable in the case of a bank- value set; throughput is measured in operations/second, and ing application, where consistency between the reported latency in seconds. balances/payments/etc. with the true bank account is cru- Total cost of ownership (TCO) includes hard- cial. Therefore, the only salient point in this case is the ware/software costs, training, maintenance, technical 100% quality point, and Figure 1 shows one of the simplest support, network connectivity, etc. In this example we use utility curves possible: a function. Any quality below the per-year amortized cost, with the TCO axis quantified 100% is useless, hence utility 0; once the quality is 100%, in dollars/year. it perfectly meets the requirement of the application. When choosing values and metrics for points on any Availability of the service is the percentage of requests of the design axes, system designers will generally choose that are satisfactorily fulfilled by the bank’s web site. Ac- units specific to the applications that will use the state repos- cording to various surveys, the true availability of the best- itory they are building. of-breed web sites today is on the order of 98%, so we choose that as one salient point. For competitive reasons, we would expect the online bank to find a system with 4. The Requirements Specification poorer availability than 98% to be totally useless. The util- ity of availability rapidly increases until it reaches the order The requirements specification is a collection of utility of 3 nines, after which any further improvements in avail- functions, one for each axis of the design space, along with ability become rather worthless, as we can count on users a formula for combining individual utilities into an over- to retry a failed request. This yields a second salient point all utility. It is acceptable for points on the axes to not be at 99.9%. We interpolate and show the resulting curve in quantified with absolute metrics; what really matters is that Figure 1. values can be compared to each other. The units used for Security of the service is defined in terms of how useful measuring utility need to be uniform across all five axes, to the different assurance levels would be, so it is is natural to

3 Properties of Computer Systems

• Four characteristics • emergent properties • propagation of effects 2/3 profile view • incommensurate scaling • inevitable trade-offs of instructor • Synthesize a system from requirements • Road ahead: • representations, abstractions, and design ideas • combat the ad-hoc nature of system design • take a principled approach to the design process

George Candea Principles of Computer Systems 8 Modularity

Prof. George Candea School of Computer & Communication Sciences Symptoms of Complexity (Recap)

• Large number of components • Large number of interconnections • ⇒ small disturbance can have chaotic consequences

K(object) >= |object| => complex K(object) << |object| => simple • High Kolmogorov complexity • Irregularities and exceptions • ⇒ large # of brains required to understand the whole

George Candea Principles of Computer Systems 2 George Candea Principles of Computer Systems 3 MAIN0001* PROGRAM TO SOLVE THE QUADRATIC EQUATION MAIN0002 READ 10,A,B,C $ MAIN0003 DISC = B*B-4*A*C $ MAIN0004 IF (DISC) NEGA,ZERO,POSI $ MAIN0005 NEGA R = 0.0 - 0.5 * B/A $ MAIN0006 AI = 0.5 * SQRTF(0.0-DISC)/A $ MAIN0007 PRINT 11,R,AI $ MAIN0008 GO TO FINISH $ MAIN0009 ZERO R = 0.0 - 0.5 * B/A $ MAIN0010 PRINT 21,R $ MAIN0011 GO TO FINISH $ MAIN0012 POSI SD = SQRTF(DISC) $ MAIN0013 R1 = 0.5*(SD-B)/A $ MAIN0014 R2 = 0.5*(0.0-(B+SD))/A $ MAIN0015 PRINT 31,R2,R1 $ MAIN0016 FINISH STOP $ MAIN0017 10 FORMAT( 3F12.5 ) $ MAIN0018 11 FORMAT( 19H TWO COMPLEX ROOTS:, F12.5,14H PLUS OR MINUS, MAIN0019 F12.5, 2H I ) $ MAIN0020 21 FORMAT( 15H ONE REAL ROOT:, F12.5 ) $ MAIN0021 31 FORMAT( 16H TWO REAL ROOTS:, F12.5, 5H AND , F12.5 ) $ MAIN0022 END $

George Candea Principles of Computer Systems 4 Structured Programming

The competent is fully aware of the strictly limited size of his own skull and therefore approaches the programming task in full humility.

Edsger Dijkstra

George Candea Principles of Computer Systems 5 Structured Programming

• Three basic constructs • single-entry / single-exit control constructs • sequence, selection, iteration • Structured program • ordered, disciplined, doesn't jump around unpredictably • can read easily and reason about ⇒ higher quality

George Candea Principles of Computer Systems 6 Structured Programming

statement T condition F statement block block Selection block Selection Sequence block Sequence statement

• Three basic constructs single-entry / single-exit control constructs F • condition • sequence, selection, iteration T • Structured program • ordered, disciplined, doesn't jump around unpredictably

Iteration block Iteration block • can read easily and reason about ⇒ higher quality

George Candea Principles of Computer Systems 6 include/linux/fs.h

2651 #define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \ 2652 static int __fops ## _open(struct inode *inode, struct file *file) \ 2653 { \ 2654 __simple_attr_check_format(__fmt, 0ull); \ 2655 return simple_attr_open(inode, file, __get, __set, __fmt); \ 2656 } \ 2657 static const struct file_operations __fops = { \ 2658 .owner = THIS_MODULE, \ 2659 .open = __fops ## _open, \ 2660 .release = simple_attr_release, \ 2661 .read = simple_attr_read, \ 2662 .write = simple_attr_write, \ 2663 .llseek = generic_file_llseek, \ 2664 };

fs/debugfs/file.c:

65 DEFINE_SIMPLE_ATTRIBUTE(fops_u8, debugfs_u8_get, debugfs_u8_set, "%llu\n"); 66 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_ro, debugfs_u8_get, NULL, "%llu\n"); 67 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo, NULL, debugfs_u8_set, "%llu\n");

instead of

static int fops_u8_open(struct inode *inode, struct file *file) { fs/debugfs/file.c __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8 = { .owner = THIS_MODULE, .open = fops_u8_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, }; static int fops_u8_ro_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, NULL, "%llu\n"); } static const struct file_operations fops_u8_ro = { .owner = THIS_MODULE, .open = fops_u8_ro_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, }; static int fops_u8_wo_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, NULL, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8_wo = { .owner = THIS_MODULE, .open = fops_u8_wo_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, George Candea }; Principles of Computer Systems 7

appears 23 times in file.c

appears in 90 places in the

drivers/mmc/core/debugfs.c drivers/hwmon/asus_atk0110.c include/linux/fs.h

2651 #define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \ 2652 static int __fops ## _open(struct inode *inode, struct file *file) \ 2653 { \ 2654 __simple_attr_check_format(__fmt, 0ull); \ 2655 return simple_attr_open(inode, file, __get, __set, __fmt); \ 2656 } \ 2657 static const struct file_operations __fops = { \ 2658 .owner = THIS_MODULE, \ 2659 .open = __fops ## _open, \ 2660 .release = simple_attr_release, \ 2661 .read = simple_attr_read, \ 2662 .write = simple_attr_write, \ 2663 .llseek = generic_file_llseek, \ 2664 };

fs/debugfs/file.c:

65 DEFINE_SIMPLE_ATTRIBUTE(fops_u8, debugfs_u8_get, debugfs_u8_set, "%llu\n"); 66 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_ro, debugfs_u8_get, NULL, "%llu\n"); 67 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo, NULL, debugfs_u8_set, "%llu\n");

instead of

static int fops_u8_open(struct inode *inode, struct file *file) { fs/debugfs/file.c __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8 = { include/linux/fs.h .owner = THIS_MODULE, .open = fops_u8_open, .release = simple_attr_release, #define DEFINE_SIMPLE_ATTRIBUTE .read = (simple_attr_read,__fops, __get , __set , __fmt ) \ static int __fops ## _open( .writestruct = simple_attr_write, inode *inode , struct file * file ) \ .llseek = generic_file_llseek, { }; \ __simple_attr_check_format(__fmt,static int fops_u8_ro_open(struct inode0ull); *inode , struct file * file ) \ { return simple_attr_open(inode, __simple_attr_check_format( file,"%llu\n" __get,, 0ull); __set, __fmt); \ } return simple_attr_open(inode, file, debugfs_u8_get, NULL , "%llu\n" ); \ } static const structstatic file_operations const struct file_operations __fops fops_u8_ro= { = { \ .owner = THIS_MODULE, .owner = THIS_MODULE, \ .open = fops_u8_ro_open, .open = __fops .release ## _open, = simple_attr_release, \ .release = simple_attr_release, .read = simple_attr_read, \ .write = simple_attr_write, .read = simple_attr_read, .llseek = generic_file_llseek, \ .write = };simple_attr_write, \ static int fops_u8_wo_open(struct inode *inode, struct file *file) .llseek = {generic_file_llseek, \ }; __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, NULL, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8_wo = { .owner = THIS_MODULE, fs/debugfs/file.c: .open = fops_u8_wo_open, .release = simple_attr_release, .read = simple_attr_read, DEFINE_SIMPLE_ATTRIBUTE(fops_u8, .write = simple_attr_write, debugfs_u8_get, debugfs_u8_set, "%llu\n" ); DEFINE_SIMPLE_ATTRIBUTE(fops_u8_ro, .llseek = generic_file_llseek, debugfs_u8_get, NULL , "%llu\n" ); George Candea Principles of Computer Systems 7 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo,}; NULL, debugfs_u8_set, "%llu\n"); appears 23 times in file.c

instead of appears in 90 places in the Linux kernel

drivers/mmc/core/debugfs.c static int fops_u8_opendrivers/hwmon/asus_atk0110.c(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8 = { .owner = THIS_MODULE, .open = fops_u8_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, }; static int fops_u8_ro_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, NULL, "%llu\n"); } static const struct file_operations fops_u8_ro = { .owner = THIS_MODULE, .open = fops_u8_ro_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, }; static int fops_u8_wo_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, NULL, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8_wo = { .owner = THIS_MODULE, .open = fops_u8_wo_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, };

appears 23 times in file.c

appears in 90 places in the Linux kernel

drivers/mmc/core/debugfs.c drivers/hwmon/asus_atk0110.c include/linux/fs.h

2651 #define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \ 2652 static int __fops ## _open(struct inode *inode, struct file *file) \ 2653 { \ 2654 __simple_attr_check_format(__fmt, 0ull); \ 2655 return simple_attr_open(inode, file, __get, __set, __fmt); \ 2656 } \ 2657 static const struct file_operations __fops = { \ 2658 .owner = THIS_MODULE, \ 2659 .open = __fops ## _open, \ 2660 .release = simple_attr_release, \ 2661 .read = simple_attr_read, \ 2662 .write = simple_attr_write, \ 2663 .llseek = generic_file_llseek, \ 2664 };

fs/debugfs/file.c:

65 DEFINE_SIMPLE_ATTRIBUTE(fops_u8, debugfs_u8_get, debugfs_u8_set, "%llu\n"); 66 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_ro, debugfs_u8_get, NULL, "%llu\n"); 67 DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo, NULL, debugfs_u8_set, "%llu\n");

instead of

static int fops_u8_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, debugfs_u8_set, "%llu\n"include/linux/fs.h); } #define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \ static const struct file_operations fops_u8 = { static int __fops ## _open(struct inode *inode, struct file *file) \ .owner = THIS_MODULE, { \ __simple_attr_check_format(__fmt, 0ull); \ .open = fops_u8_open, return simple_attr_open(inode, file, __get, __set, __fmt); \ .release = simple_attr_release, } \ .read = simple_attr_read, static const struct file_operations __fops = { \ .owner = THIS_MODULE, \ .write = simple_attr_write, .open = __fops ## _open, \ .llseek = generic_file_llseek, .release = simple_attr_release, \ .read = simple_attr_read, \ }; .write = simple_attr_write, \ static int fops_u8_ro_open(struct inode *inode, struct file *file) .llseek = generic_file_llseek, \ }; { include/linux/fs.h __simple_attr_check_format("%llu\n", 0ull); fs/debugfs/file.c: return simple_attr_open(inode, file,2651 debugfs_u8_get, #define DEFINE_SIMPLE_ATTRIBUTE(__fops, NULL, "%llu\n"); __get, __set, __fmt) \ } DEFINE_SIMPLE_ATTRIBUTE(fops_u8, debugfs_u8_get, debugfs_u8_set, "%llu\n"); static const struct file_operations fops_u8_ro2652 static= { int __fops ## _open( DEFINE_SIMPLE_ATTRIBUTE(fops_u8_ro,struct inode *inode, debugfs_u8_get,struct file NULL ,* file"%llu\n")); \ DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo, NULL, debugfs_u8_set, "%llu\n"); .owner = THIS_MODULE, 2653 { \ .open = fops_u8_ro_open, 2654 __simple_attr_check_format(__fmt, instead of 0ull); \

.release = simple_attr_release, 2655 return simple_attr_open(inode, static int fops_u8_open file,(struct inode__get, *inode __set,, struct file __fmt); *file) \ .read = simple_attr_read, 2656 } { \ .write = simple_attr_write, __simple_attr_check_format("%llu\n", 0ull); 2657 static const struct file_operations return simple_attr_open(inode,__fops = { file, debugfs_u8_get, debugfs_u8_set, \"%llu\n"); .llseek = generic_file_llseek, } }; 2658 .owner = THIS_MODULE,static const struct file_operations fops_u8 = { \ 2659 .open = __fops ## _open, .owner = THIS_MODULE, \ static int fops_u8_wo_open(struct inode *inode, struct file *file) .open = fops_u8_open, { 2660 .release = simple_attr_release, .release = simple_attr_release, \ .read = simple_attr_read, __simple_attr_check_format("%llu\n"2661, 0ull); .read = simple_attr_read, .write = simple_attr_write, \ return simple_attr_open(inode, file,2662 NULL , debugfs_u8_set, .write ="%llu\n" simple_attr_write,); .llseek = generic_file_llseek, \ } }; 2663 .llseek = generic_file_llseek,static int fops_u8_ro_open ( struct inode *inode , struct file *file ) \ static const struct file_operations fops_u8_wo = { { .owner = THIS_MODULE, 2664 }; __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, NULL, "%llu\n"); .open = fops_u8_wo_open, } .release = simple_attr_release, static const struct file_operations fops_u8_ro = { .read = simple_attr_read, .owner = THIS_MODULE, fs/debugfs/file.c: .open = fops_u8_ro_open, .write = simple_attr_write, .release = simple_attr_release, .llseek = generic_file_llseek, .read = simple_attr_read, DEFINE_SIMPLE_ATTRIBUTE(fops_u8, debugfs_u8_get, .write = simple_attr_write, debugfs_u8_set, "%llu\n" ); }; .llseek = generic_file_llseek, DEFINE_SIMPLE_ATTRIBUTE(fops_u8_ro,}; debugfs_u8_get, NULL, "%llu\n"); DEFINE_SIMPLE_ATTRIBUTE(fops_u8_wo,static intNULL fops_u8_wo_open, debugfs_u8_set,(struct inode *inode "%llu\n", struct file); *file) appears 23 times in file.c { George Candea __simple_attr_check_format("%llu\n", 0ull); Principles of Computer Systems 8 appears in 90 places in the Linux kernel return simple_attr_open(inode, file, NULL, debugfs_u8_set, "%llu\n"); instead of } static const struct file_operations fops_u8_wo = { drivers/mmc/core/debugfs.c .owner = THIS_MODULE, static int fops_u8_open(struct inode .open*inode = fops_u8_wo_open,, struct file * file ) drivers/hwmon/asus_atk0110.c .release = simple_attr_release, { .read = simple_attr_read, __simple_attr_check_format( "%llu\n" .write = simple_attr_write,, 0ull); .llseek = generic_file_llseek, return simple_attr_open(inode,}; file, debugfs_u8_get, debugfs_u8_set, "%llu\n");

} appears 23 times in file.c static const struct file_operations fops_u8 = { appears in 90 places in the Linux kernel .owner = THIS_MODULE, drivers/mmc/core/debugfs.c .open = fops_u8_open,drivers/hwmon/asus_atk0110.c .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, }; static int fops_u8_ro_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, debugfs_u8_get, NULL, "%llu\n"); } static const struct file_operations fops_u8_ro = { .owner = THIS_MODULE, .open = fops_u8_ro_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, }; static int fops_u8_wo_open(struct inode *inode, struct file *file) { __simple_attr_check_format("%llu\n", 0ull); return simple_attr_open(inode, file, NULL, debugfs_u8_set, "%llu\n"); } static const struct file_operations fops_u8_wo = { .owner = THIS_MODULE, .open = fops_u8_wo_open, .release = simple_attr_release, .read = simple_attr_read, .write = simple_attr_write, .llseek = generic_file_llseek, };

appears 23 times in file.c

appears in 90 places in the Linux kernel

drivers/mmc/core/debugfs.c drivers/hwmon/asus_atk0110.c Modularity Through Virtualization

• Server consolidation • Reduce operating costs • Reduce management costs • • On-demand VM provisioning • VM migration • VM replication

George Candea Principles of Computer Systems 9 Modularity Outside Computer Science

• Cell = module used to build organisms • Gene = unit (module) of evolution • Cognitive activity (may be) modularized • Division of labor = modularization • Spare parts = modules • IKEA ... modular furniture

George Candea Principles of Computer Systems 10 Modularity Outside Computer Science

• Cell = module used to build organisms • Gene = unit (module) of evolution • Cognitive activity (may be) modularized • Division of labor = modularization • Spare parts = modules • IKEA ... modular furniture

George Candea Principles of Computer Systems 10 Modularity Outside Computer Science

• Cell = module used to build organisms • Gene = unit (module) of evolution • Cognitive activity (may be) modularized • Division of labor = modularization • Spare parts = modules • IKEA ... modular furniture

George Candea Principles of Computer Systems 10 Modularity Outside Computer Science

• Cell = module used to build organisms • Gene = unit (module) of evolution • Cognitive activity (may be) modularized • Division of labor = modularization • Spare parts = modules • IKEA ... modular furniture

George Candea Principles of Computer Systems 10 Modularity Outside Computer Science

• Cell = module used to build organisms • Gene = unit (module) of evolution • Cognitive activity (may be) modularized • Division of labor = modularization • Spare parts = modules • IKEA ... modular furniture

George Candea Principles of Computer Systems 10