1# x depends on (requires) y 2# 0 - no dependency, 1 - dependency, 2 - don't know 3# should have a way of saying optional, and disallowed 4# f - fundamental, fb - fundamental using barrelfish mechanisms, 5# b - barrelfish implementation, i - implementation 6# assuming single machine (not network-based IDC) 7binding capability_mgmt 1 fb # requires end points. also to be able to send/receive caps 8binding debugging 0 9binding driver 0 10binding device_man 0 11binding environment 0 12binding group_comm 1 f # group communication functionality is accessed through the binding service 13binding lock_service 2 i # implementation may use locking 14binding mem_alloc 0 15binding naming 0 16binding network_stack 0 17binding power_mgmt 0 18binding principals 0 19binding process_mgmt 0 20binding resource_acct_mgmt 0 21binding routing 1 f # routed connections are managed through the binding service 22binding shell 0 23binding skb 1 fb # need to know about cores available, and to set up communication mechanisms 24binding storage_mgmt 0 25binding terminal 0 26binding threading 1 f # binding needs to wake up threads in a dispatcher 27binding tracing 0 28binding VMachine 0 29binding VMem 1 i # binding needs to set up shared memory 30capability_mgmt binding 1 b # needs to bind to other services and managers 31capability_mgmt debugging 0 32capability_mgmt driver 0 33capability_mgmt device_man 0 34capability_mgmt environment 0 35capability_mgmt group_comm 2 i # depends on how it communicates with capability managers on other cores 36capability_mgmt lock_service 0 37capability_mgmt mem_alloc 1 f # needs memory (RAM caps) to create, move, etc. caps 38capability_mgmt naming 1 b # needs to find other services and managers 39capability_mgmt network_stack 0 40capability_mgmt power_mgmt 0 41capability_mgmt principals 0 42capability_mgmt process_mgmt 0 43capability_mgmt resource_acct_mgmt 0 44capability_mgmt routing 0 45capability_mgmt shell 0 46capability_mgmt skb 0 47capability_mgmt storage_mgmt 0 48capability_mgmt terminal 0 49capability_mgmt threading 0 50capability_mgmt tracing 0 51capability_mgmt VMachine 0 52capability_mgmt VMem 0 53debugging binding 1 b # needs to bind to other services and managers 54debugging capability_mgmt 1 f # need to inspect and modify cap allocations 55debugging driver 0 56debugging device_man 0 57debugging environment 0 58debugging group_comm 0 59debugging lock_service 0 60debugging mem_alloc 0 61debugging naming 1 b # needs to find other services and managers 62debugging network_stack 0 63debugging power_mgmt 0 64debugging principals 0 65debugging process_mgmt 1 f # to debug at the process level, connect to processes etc. 66debugging resource_acct_mgmt 0 67debugging routing 0 68debugging shell 0 69debugging skb 2 fb # ? does debug service need to know about system? 70debugging storage_mgmt 0 71debugging terminal 0 72debugging threading 1 f # to debug at thread level, connect to threads, etc. 73debugging tracing 0 74debugging VMachine 0 75debugging VMem 1 f # inspect and modify memory mappings, page tables 76driver binding 1 b # needs to bind to other services and managers 77driver capability_mgmt 1 fb # device drivers need caps to their hardware 78driver debugging 0 79driver environment 0 80driver group_comm 0 81driver lock_service 2 i # drivers may need locking 82driver mem_alloc 1 fb # drivers need mem caps, e.g, for DMA 83driver naming 1 b # needs to find other services and managers 84driver network_stack 0 85driver power_mgmt 2 f # drivers need to know system power state (e.g., suspend, shut down, etc.). Note this could just be an interface they provide that is invoked by power manager rather than that drivers have to use power manager. 86driver principals 0 87driver process_mgmt 0 88driver resource_acct_mgmt 0 89driver routing 0 90driver shell 0 91driver skb 0 92driver storage_mgmt 0 93driver terminal 0 94driver threading 0 95driver tracing 0 96driver VMachine 0 97driver VMem 1 f # drivers need to map memory for DMA, zero copy, etc. 98device_man binding 1 b # needs to bind to other services and managers 99device_man capability_mgmt 0 100device_man debugging 0 101device_man environment 0 102device_man group_comm 0 103device_man lock_service 2 i 104device_man mem_alloc 0 105device_man naming 1 b # needs to find other services and managers 106device_man network_stack 0 107device_man power_mgmt 2 f # device manager needs to know system power state (e.g., suspend, shut down, etc.). Note this could just be an interface they provide that is invoked by power manager rather than that it have to use power manager. 108device_man principals 0 109device_man process_mgmt 0 110device_man resource_acct_mgmt 0 111device_man routing 0 112device_man shell 0 113device_man skb 1 fb # device and bus management (eg PCI) needs to know what's in the system for assigning addresses etc. also register info 114device_man storage_mgmt 0 115device_man terminal 0 116device_man threading 0 117device_man tracing 0 118device_man VMachine 0 119device_man VMem 0 120environment binding 0 121environment capability_mgmt 0 122environment debugging 0 123environment driver 0 124environment device_man 0 125environment group_comm 0 126environment lock_service 0 127environment mem_alloc 0 128environment naming 0 129environment network_stack 0 130environment power_mgmt 0 131environment principals 2 f # per user/session environment needs to know about users/sessions 132environment process_mgmt 2 f # per process environment needs to know about processes 133environment resource_acct_mgmt 0 134environment routing 0 135environment shell 0 136environment skb 0 137environment storage_mgmt 0 138environment terminal 0 139environment threading 0 140environment tracing 0 141environment VMachine 0 142environment VMem 0 143group_comm binding 1 f # group communication needs to use single bindings 144group_comm capability_mgmt 2 fb # does it need to manipulate endpoints. May need to pass endpoints 145group_comm debugging 0 146group_comm driver 0 147group_comm device_man 0 148group_comm environment 0 149group_comm lock_service 2 f # lock_service used to implement coordination, synchronisation, consensus? or vice versa? 150group_comm mem_alloc 0 151group_comm naming 0 152group_comm network_stack 0 153group_comm power_mgmt 0 154group_comm principals 0 155group_comm process_mgmt 0 156group_comm resource_acct_mgmt 0 157group_comm routing 2 i # needs to send messages between members. does it use routing directly? or through a general messaging layer? 158group_comm shell 0 159group_comm skb 1 fb # needs to know what is available (eg cores in system, interconnects, etc.) 160group_comm storage_mgmt 0 161group_comm terminal 0 162group_comm threading 0 163group_comm tracing 0 164group_comm VMachine 0 165group_comm VMem 0 166lock_service binding 1 b # needs to bind to other services and managers 167lock_service capability_mgmt 0 168lock_service debugging 0 169lock_service driver 0 170lock_service device_man 0 171lock_service environment 0 172lock_service group_comm 2 i # depends on how the lock primitives are implemented 173lock_service mem_alloc 0 174lock_service naming 1 b # needs to communicate with other services and managers 175lock_service network_stack 0 176lock_service power_mgmt 0 177lock_service principals 0 178lock_service process_mgmt 1 f # needs to block process execution, needs to notify processes 179lock_service resource_acct_mgmt 0 180lock_service routing 0 181lock_service shell 0 182lock_service skb 0 183lock_service storage_mgmt 0 184lock_service terminal 0 185lock_service threading 1 f # needs to block thread execution, needs to notify threads 186lock_service tracing 0 187lock_service VMachine 0 188lock_service VMem 0 189mem_alloc binding 1 b # needs to bind to other services and managers 190mem_alloc capability_mgmt 1 fb # needs RAM caps to do cap management 191mem_alloc debugging 0 192mem_alloc driver 0 193mem_alloc device_man 0 194mem_alloc environment 0 195mem_alloc group_comm 0 196mem_alloc lock_service 0 197mem_alloc naming 0 198mem_alloc network_stack 0 199mem_alloc power_mgmt 0 200mem_alloc principals 0 201mem_alloc process_mgmt 0 202mem_alloc resource_acct_mgmt 2 f # possibly needs to know about available (memory) resources at any given moment 203mem_alloc routing 0 204mem_alloc shell 0 205mem_alloc skb 2 fb # needs to know what resources the system has 206mem_alloc storage_mgmt 0 207mem_alloc terminal 0 208mem_alloc threading 0 209mem_alloc tracing 0 210mem_alloc VMachine 0 211mem_alloc VMem 0 212naming binding 1 b # needs to bind to other services and managers 213naming capability_mgmt 0 214naming debugging 0 215naming driver 0 216naming device_man 0 217naming environment 0 218naming group_comm 2 i # may use group communication for notification 219naming lock_service 0 220naming mem_alloc 0 221naming network_stack 0 222naming power_mgmt 0 223naming principals 0 224naming process_mgmt 0 225naming resource_acct_mgmt 0 226naming routing 0 227naming shell 0 228naming skb 0 229naming storage_mgmt 0 230naming terminal 0 231naming threading 0 232naming tracing 0 233naming VMachine 0 234naming VMem 0 235network_stack binding 1 b # needs to bind to other services and managers 236network_stack capability_mgmt 0 237network_stack debugging 0 238network_stack driver 1 f # needs to access network drivers 239network_stack device_man 0 240network_stack environment 2 i # may rely on environment settings 241network_stack group_comm 2 i # may be implemented using group communication 242network_stack lock_service 2 i # likely to be implemented with locking 243network_stack mem_alloc 0 244network_stack naming 1 b # needs to find other services and managers 245network_stack power_mgmt 0 246network_stack principals 0 247network_stack process_mgmt 0 248network_stack resource_acct_mgmt 0 249network_stack routing 0 250network_stack shell 0 251network_stack skb 2 fb # needs to know about network devices and other system info 252network_stack storage_mgmt 0 253network_stack terminal 0 254network_stack threading 0 255network_stack tracing 0 256network_stack VMachine 0 257network_stack VMem 2 i # may need to manipulate mapping for zero-copy 258power_mgmt binding 1 b # needs to bind to other services and managers 259power_mgmt capability_mgmt 2 fb # may need to manipulate caps to be able to modify power settings 260power_mgmt debugging 0 261power_mgmt driver 1 f # needs to access drivers to change power states, etc. 262power_mgmt device_man 1 f # needs to access drivers to change power states, etc. 263power_mgmt environment 0 264power_mgmt group_comm 2 i # likely to be implemented using group communication 265power_mgmt lock_service 2 i # likely to require locking 266power_mgmt mem_alloc 0 267power_mgmt naming 1 b # needs to find other services and managers 268power_mgmt network_stack 0 269power_mgmt principals 0 270power_mgmt process_mgmt 0 271power_mgmt resource_acct_mgmt 2 f # needs information about system resources to make power management decisions 272power_mgmt routing 0 273power_mgmt shell 0 274power_mgmt skb 1 fb # needs to know what is available in the system, what should be monitored and controlled 275power_mgmt storage_mgmt 0 276power_mgmt terminal 0 277power_mgmt threading 0 278power_mgmt tracing 0 279power_mgmt VMachine 0 280power_mgmt VMem 0 281principals binding 2 b # needs to bind to other services and managers 282principals capability_mgmt 1 fb # access control based on capabilities 283principals debugging 0 284principals driver 0 285principals device_man 0 286principals environment 0 287principals group_comm 0 288principals lock_service 0 289principals mem_alloc 0 290principals naming 2 b # needs to find other services and managers 291principals network_stack 0 292principals power_mgmt 0 293principals process_mgmt 0 294principals resource_acct_mgmt 0 295principals routing 0 296principals shell 0 297principals skb 0 298principals storage_mgmt 0 299principals terminal 0 300principals threading 0 301principals tracing 0 302principals VMachine 0 303principals VMem 0 304process_mgmt binding 1 b # needs to bind to other services and managers 305process_mgmt capability_mgmt 1 fb # needs to manipulate processes cspace (setup, teardown, etc.) 306process_mgmt debugging 0 307process_mgmt driver 0 308process_mgmt device_man 0 309process_mgmt environment 0 310process_mgmt group_comm 2 i # likely to use group comm to contact dispatchers that make up a domain) 311process_mgmt lock_service 0 312process_mgmt mem_alloc 0 313process_mgmt naming 1 b # needs to find other services and managers 314process_mgmt network_stack 0 315process_mgmt power_mgmt 0 316process_mgmt principals 1 f # needs to know what permissions to give process (and thus what caps to give it) 317process_mgmt resource_acct_mgmt 1 f # needs to account process's usage 318process_mgmt routing 0 319process_mgmt shell 0 320process_mgmt skb 0 321process_mgmt storage_mgmt 0 322process_mgmt terminal 0 323process_mgmt threading 1 f # manage threads as part of process management 324process_mgmt tracing 0 325process_mgmt VMachine 0 326process_mgmt VMem 1 f # needs to set up a process's address space 327resource_acct_mgmt binding 2 b # needs to bind to other services and managers 328resource_acct_mgmt capability_mgmt 1 fb # needs to manipulate caps for resource management 329resource_acct_mgmt debugging 0 330resource_acct_mgmt driver 1 f # needs to find out about and manage device usage from drivers and device managers 331resource_acct_mgmt device_man 1 f # needs to find out about and manage device usage from drivers and device managers 332resource_acct_mgmt environment 0 333resource_acct_mgmt group_comm 2 i # likely to use group communication 334resource_acct_mgmt lock_service 2 i # likely to use locking/synchronisation 335resource_acct_mgmt mem_alloc 0 336resource_acct_mgmt naming 1 b # needs to find other services and managers 337resource_acct_mgmt network_stack 0 338resource_acct_mgmt power_mgmt 1 f # needs to account and manage power usage (power is also a type of resource to be managed) 339resource_acct_mgmt principals 0 340resource_acct_mgmt process_mgmt 1 f # account and manage processes 341resource_acct_mgmt routing 0 342resource_acct_mgmt shell 0 343resource_acct_mgmt skb 1 fb # needs to know what resources there are to manage 344resource_acct_mgmt storage_mgmt 2 f # things like disk space management, quota management, etc. 345resource_acct_mgmt terminal 0 346resource_acct_mgmt threading 0 347resource_acct_mgmt tracing 0 # might use tracing service to get data 348resource_acct_mgmt VMachine 0 349resource_acct_mgmt VMem 0 350routing binding 1 f # will need to use point-to-point bindings to implement multi-hop routing 351routing capability_mgmt 1 fb # will need to create new endpoints? 352routing debugging 0 353routing driver 0 354routing device_man 0 355routing environment 0 356routing group_comm 2 i # likely to use group communication to do routing 357routing lock_service 2 i # likely to use locking/synchronisation 358routing mem_alloc 0 359routing naming 2 b # needs to find other services and managers, also for point-to-point links 360routing network_stack 0 361routing power_mgmt 0 362routing principals 0 363routing process_mgmt 0 364routing resource_acct_mgmt 0 365routing shell 0 366routing skb 2 fb # needs to know what cores and interconnects there are to do routing 367routing storage_mgmt 0 368routing terminal 0 369routing threading 0 370routing tracing 0 371routing VMachine 0 372routing VMem 0 373shell binding 1 b # needs to bind to other services and managers 374shell capability_mgmt 0 375shell debugging 0 376shell driver 0 377shell device_man 0 378shell environment 1 f # environment affects shell's behaviour 379shell group_comm 0 380shell lock_service 0 381shell mem_alloc 0 382shell naming 1 b # needs to find other services and managers 383shell network_stack 0 384shell power_mgmt 0 385shell principals 1 f # needs to determine authorisation, permissions, access control 386shell process_mgmt 1 f # needs to start, stop, suspend, etc. processes 387shell resource_acct_mgmt 0 388shell routing 0 389shell skb 0 390shell storage_mgmt 1 f # needs to access program files 391shell terminal 1 f # I/O through terminal 392shell threading 1 f # needs to manage thread execution (start, stop, suspend) 393shell tracing 0 394shell VMachine 0 395shell VMem 0 396skb binding 1 b # needs to listen for connections 397skb capability_mgmt 0 398skb debugging 0 399skb driver 0 400skb device_man 0 401skb environment 0 402skb group_comm 0 403skb lock_service 0 404skb mem_alloc 0 405skb naming 1 b # needs to register 406skb network_stack 0 407skb power_mgmt 0 408skb principals 0 409skb process_mgmt 0 410skb resource_acct_mgmt 0 411skb routing 0 412skb shell 0 413skb storage_mgmt 1 i # needs to read pl files and store DB 414skb terminal 0 415skb threading 0 416skb tracing 0 417skb VMachine 0 418skb VMem 0 419storage_mgmt binding 1 b # needs to bind to other services and managers 420storage_mgmt capability_mgmt 1 fb # uses capabilities for access control 421storage_mgmt debugging 0 422storage_mgmt driver 1 f # needs to access disk/storage devices 423storage_mgmt device_man 0 424storage_mgmt environment 0 425storage_mgmt group_comm 2 i # likely to use group communication 426storage_mgmt lock_service 2 i # likely to use locking 427storage_mgmt mem_alloc 0 428storage_mgmt naming 1 b # needs to find other services and managers 429storage_mgmt network_stack 0 430storage_mgmt power_mgmt 0 431storage_mgmt principals 2 f # needs to do access control 432storage_mgmt process_mgmt 0 433storage_mgmt resource_acct_mgmt 0 434storage_mgmt routing 0 435storage_mgmt shell 0 436storage_mgmt skb 2 fb # to find out what devices are available? 437storage_mgmt terminal 0 438storage_mgmt threading 0 439storage_mgmt tracing 0 440storage_mgmt VMachine 0 441storage_mgmt VMem 1 f # mmaped files, zero copy, etc. 442terminal binding 1 b # needs to bind to other services and managers 443terminal capability_mgmt 2 i # possibly for framebuffer or mapping output buffers? 444terminal debugging 0 445terminal driver 1 f # needs to access input an output devices 446terminal device_man 0 447terminal environment 0 448terminal group_comm 0 449terminal lock_service 2 i # likely to use locking, synchronisation 450terminal mem_alloc 0 451terminal naming 1 b # needs to find other services and managers 452terminal network_stack 0 453terminal power_mgmt 0 454terminal principals 0 455terminal process_mgmt 0 456terminal resource_acct_mgmt 0 457terminal routing 0 458terminal shell 0 459terminal skb 2 fb # needs to find out what devices are available 460terminal storage_mgmt 0 461terminal threading 0 462terminal tracing 0 463terminal VMachine 0 464terminal VMem 2 i # possibly for framebuffer or mapping output buffers? 465threading binding 2 b # needs to bind to other services and managers 466threading capability_mgmt 1 fb # needs to manipulate access to thread local storage, stacks, etc. 467threading debugging 0 468threading driver 0 469threading device_man 0 470threading environment 0 471threading group_comm 0 472threading lock_service 2 f # needs to provide thread specific synch 473threading mem_alloc 0 474threading naming 2 b # needs to find other services and managers 475threading network_stack 0 476threading power_mgmt 0 477threading principals 0 478threading process_mgmt 1 f # threads exist in the context of a process/domain 479threading resource_acct_mgmt 0 480threading routing 0 481threading shell 0 482threading skb 0 483threading storage_mgmt 0 484threading terminal 0 485threading tracing 0 486threading VMachine 0 487threading VMem 1 f # manage memory accessible by a thread 488# not sure how the tracing works - it's potentially dependent on everything and vice versa? 489tracing binding 1 b # needs to listen for connectiosn 490tracing capability_mgmt 0 491tracing debugging 0 492tracing driver 0 493tracing device_man 0 494tracing environment 0 495tracing group_comm 0 496tracing lock_service 0 497tracing mem_alloc 0 498tracing naming 1 b # needs to register 499tracing network_stack 0 500tracing power_mgmt 0 501tracing principals 0 502tracing process_mgmt 0 503tracing resource_acct_mgmt 0 504tracing routing 0 505tracing shell 0 506tracing skb 0 507tracing storage_mgmt 0 508tracing terminal 0 509tracing threading 0 510tracing VMachine 0 511tracing VMem 0 512# not sure about the VMM 513VMachine binding 1 b # needs to use other services 514VMachine capability_mgmt 1 fb 515VMachine debugging 0 516VMachine driver 1 f 517VMachine device_man 1 f 518VMachine environment 0 519VMachine group_comm 0 520VMachine lock_service 2 i 521VMachine mem_alloc 1 f # needs to deal with RAm and device memory 522VMachine naming 1 b # needs to find other services 523VMachine network_stack 2 i # may use net stack to virtualise network traffic 524VMachine power_mgmt 2 i # may do power management 525VMachine principals 0 526VMachine process_mgmt 1 f 527VMachine resource_acct_mgmt 0 528VMachine routing 0 529VMachine shell 0 530VMachine skb 2 fb # may need to find avaialbel resources 531VMachine storage_mgmt 2 i # may use FS to virtualise storage access 532VMachine terminal 0 533VMachine threading 0 534VMachine tracing 0 535VMachine VMem 1 f # needs to manage virtual mem mappings 536VMem binding 1 b # needs to bind to other services and managers 537VMem capability_mgmt 1 fb # needs to manipulate caps 538VMem debugging 0 539VMem driver 1 f # for paging 540VMem device_man 0 541VMem environment 0 542VMem group_comm 2 i # likely to be implemented using group comm 543VMem lock_service 2 i # likely to use locking/sync 544VMem mem_alloc 1 f # needs RAM caps to do mappings etc. 545VMem naming 1 b # needs to find other services and managers 546VMem network_stack 0 547VMem power_mgmt 0 548VMem principals 0 549VMem process_mgmt 0 550VMem resource_acct_mgmt 0 551VMem routing 0 552VMem shell 0 553VMem skb 1 fb # needs to know what memory is available 554VMem storage_mgmt 1 f # for paging 555VMem terminal 0 556VMem threading 0 557VMem tracing 0 558VMem VMachine 0 559