{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,9,28]],"date-time":"2025-09-28T15:08:31Z","timestamp":1759072111023,"version":"3.41.0"},"reference-count":36,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2012,2,1]],"date-time":"2012-02-01T00:00:00Z","timestamp":1328054400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Comput. Syst."],"published-print":{"date-parts":[[2012,2]]},"abstract":"<jats:p>C remains the language of choice for hardware programming (device drivers, bus configuration, etc.): it is fast, allows low-level access, and is trusted by OS developers. However, the algorithms required to configure and reconfigure hardware devices and interconnects are becoming more complex and diverse, with the added burden of legacy support, \u201cquirks,\u201d and hardware bugs to work around. Even programming PCI bridges in a modern PC is a surprisingly complex problem, and is getting worse as new functionality such as hotplug appears. Existing approaches use relatively simple algorithms, hard-coded in C and closely coupled with low-level register access code, generally leading to suboptimal configurations.<\/jats:p>\n          <jats:p>\n            We investigate the merits and drawbacks of a new approach: separating hardware configuration\n            <jats:italic>logic<\/jats:italic>\n            (algorithms to determine configuration parameter values) from\n            <jats:italic>mechanism<\/jats:italic>\n            (programming device registers). The latter we keep in C, and the former we encode in a declarative programming language with constraint-satisfaction extensions. As a test case, we have implemented full PCI configuration, resource allocation, and interrupt assignment in the Barrelfish research operating system, using a concise expression of efficient algorithms in constraint logic programming. We show that the approach is tractable, and can successfully configure a wide range of PCs with competitive runtime cost. Moreover, it requires about half the code of the C-based approach in Linux while offering considerably more functionality. Additionally it easily accommodates adaptations such as hotplug, fixed regions, and \u201cquirks.\u201d\n          <\/jats:p>","DOI":"10.1145\/2110356.2110361","type":"journal-article","created":{"date-parts":[[2012,3,6]],"date-time":"2012-03-06T13:18:22Z","timestamp":1331039902000},"page":"1-35","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":3,"title":["A Declarative Language Approach to Device Configuration"],"prefix":"10.1145","volume":"30","author":[{"given":"Adrian","family":"Sch\u00fcpbach","sequence":"first","affiliation":[{"name":"ETH Zurich"}]},{"given":"Andrew","family":"Baumann","sequence":"additional","affiliation":[{"name":"ETH Zurich"}]},{"given":"Timothy","family":"Roscoe","sequence":"additional","affiliation":[{"name":"ETH Zurich"}]},{"given":"Simon","family":"Peter","sequence":"additional","affiliation":[{"name":"ETH Zurich"}]}],"member":"320","published-online":{"date-parts":[[2012,2]]},"reference":[{"volume-title":"Proceedings of the 1st USENIX Conference on File and Storage Technologies (FAST\u201902)","author":"Anderson E.","key":"e_1_2_1_1_1"},{"key":"e_1_2_1_2_1","unstructured":"Apt K. R. and Wallace M. G. 2007. Constraint Logic Programming Using ECLiPSe. Cambridge University Press. Apt K. R. and Wallace M. G. 2007. Constraint Logic Programming Using ECLiPSe . Cambridge University Press."},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/945445.945455"},{"volume-title":"Proceedings of the BSDCan Conference. http:\/\/www.bsdcan.org\/2009\/schedule\/attachments\/83_article.pdf.","year":"2009","author":"Baldwin J. H.","key":"e_1_2_1_4_1"},{"key":"e_1_2_1_5_1","unstructured":"Baldwin J. H. 2010. About hot-plugging support in FreeBSD. http:\/\/www.mavetju.org\/mail\/view_message.php?list=freebsd-arch&id=3106757. Baldwin J. H. 2010. About hot-plugging support in FreeBSD. http:\/\/www.mavetju.org\/mail\/view_message.php?list=freebsd-arch&id=3106757."},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/62065.62067"},{"key":"e_1_2_1_7_1","unstructured":"Barrelfish Team. 2010. The Barrelfish research operating system. http:\/\/www.barrelfish.org\/. Barrelfish Team . 2010. The Barrelfish research operating system. http:\/\/www.barrelfish.org\/."},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/1629575.1629579"},{"key":"e_1_2_1_9_1","unstructured":"Budruk R. Anderson D. and Shanley T. 2004. PCI Express System Architecture. Addison Wesley. Budruk R. Anderson D. and Shanley T. 2004. PCI Express System Architecture . Addison Wesley."},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1109\/MM.2007.43"},{"volume-title":"Proceedings of the Conference on Tools and Algorithms for the Construction and Analysis of Systems (TACAS).","author":"de Moura L.","key":"e_1_2_1_11_1"},{"key":"e_1_2_1_12_1","unstructured":"Diaz D. 2011. Gnu prolog. http:\/\/www.gprolog.org\/. Diaz D. 2011. Gnu prolog. http:\/\/www.gprolog.org\/."},{"key":"e_1_2_1_13_1","unstructured":"Dunham S. N. 1998. Method for allocating system resources in a hierarchical bus structure. US patent 5 778 197. Dunham S. N. 1998. Method for allocating system resources in a hierarchical bus structure. US patent 5 778 197."},{"volume-title":"Proceedings of the 8th USENIX Symposium on Operating Systems Design and Implementation.","author":"Gunawi H. S.","key":"e_1_2_1_14_1"},{"key":"e_1_2_1_15_1","unstructured":"Hewlett-Packard Intel Microsoft Phoenix Toshiba. 2010. Advanced configuration and power interface specification rev. 4.0a. http:\/\/www.acpi.info\/. Hewlett-Packard Intel Microsoft Phoenix Toshiba . 2010. Advanced configuration and power interface specification rev. 4.0a. http:\/\/www.acpi.info\/."},{"volume-title":"Proceedings of the 3rd Annual Conference on the Practical Applications of Prolog.","year":"1995","author":"Hovel D.","key":"e_1_2_1_16_1"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/41625.41635"},{"volume-title":"ATARE: ACPI tables and regular expressions. Tech. rep. TUD-FI09-09","year":"2009","author":"Kauer B.","key":"e_1_2_1_18_1"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/1629575.1629596"},{"key":"e_1_2_1_20_1","first-page":"1","article-title":"Mechanisms for high throughput computing","volume":"11","author":"Livny M.","year":"1997","journal-title":"SPEEDUP J."},{"volume-title":"Proceedings of the 4th USENIX Symposium on Operating Systems Design and Implementation. 17--30","author":"M\u00e9rillon F.","key":"e_1_2_1_21_1"},{"key":"e_1_2_1_22_1","unstructured":"Microsoft. 2003a. The importance of implementing APIC-based interrupt subsystems on uniprocessor PCs. http:\/\/www.microsoft.com\/whdc\/archive\/apic.mspx. Microsoft . 2003a. The importance of implementing APIC-based interrupt subsystems on uniprocessor PCs. http:\/\/www.microsoft.com\/whdc\/archive\/apic.mspx."},{"key":"e_1_2_1_23_1","unstructured":"Microsoft. 2003b. PCI multi-level rebalance in Windows Vista. http:\/\/www.microsoft.com\/whdc\/archive\/multilevel-rebal.mspx. Microsoft . 2003b. PCI multi-level rebalance in Windows Vista. http:\/\/www.microsoft.com\/whdc\/archive\/multilevel-rebal.mspx."},{"key":"e_1_2_1_24_1","unstructured":"Microsoft. 2006. Firmware allocation of PCI device resources in Windows. http:\/\/www.microsoft.com\/whdc\/connect\/PCI\/pci-rsc.mspx. Microsoft . 2006. Firmware allocation of PCI device resources in Windows. http:\/\/www.microsoft.com\/whdc\/connect\/PCI\/pci-rsc.mspx."},{"volume-title":"Proceedings of the Annual Linux Symposium.","year":"2005","author":"Mochel P.","key":"e_1_2_1_25_1"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/1629575.1629597"},{"key":"e_1_2_1_27_1","unstructured":"PCI-SIG 2009. PCI express base 2.1 specification. PCI-SIG. http:\/\/www.pcisig.com\/.  PCI-SIG 2009. PCI express base 2.1 specification. PCI-SIG. http:\/\/www.pcisig.com\/."},{"volume-title":"Proceedings of the 10th Irish Conference on Artificial Intelligence and Cognitive Science.","author":"Reis L. P.","key":"e_1_2_1_28_1"},{"key":"e_1_2_1_29_1","unstructured":"Rusling D. A. 1999. The Linux kernel. http:\/\/tldp.org\/LDP\/tlk\/tlk.html. Rusling D. A. 1999. The Linux kernel. http:\/\/tldp.org\/LDP\/tlk\/tlk.html."},{"volume-title":"Proceedings of the 1st Workshop on Managed Multi-Core Systems.","author":"Sch\u00fcpbach A.","key":"e_1_2_1_30_1"},{"key":"e_1_2_1_31_1","unstructured":"Solomon D. A. Russinovich M. E. and Ionescu A. 2009. Windows internals: Including Windows Server 2008 and Windows Vista 5th Ed. Microsoft Press Chapter 4. Solomon D. A. Russinovich M. E. and Ionescu A. 2009. Windows internals: Including Windows Server 2008 and Windows Vista 5th Ed. Microsoft Press Chapter 4."},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/1217935.1217941"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1002\/cpe.v17:2\/4"},{"key":"e_1_2_1_34_1","unstructured":"TJworld. 2008. PCI dynamic resource allocation management. http:\/\/tjworld.net\/wiki\/Linux\/PCIDynamicResourceAllocationManagement. TJworld . 2008. PCI dynamic resource allocation management. http:\/\/tjworld.net\/wiki\/Linux\/PCIDynamicResourceAllocationManagement."},{"key":"e_1_2_1_35_1","unstructured":"W3C. 2004. Resource description framework. http:\/\/www.w3.org\/RDF. W3C . 2004. Resource description framework. http:\/\/www.w3.org\/RDF."},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/1346281.1346304"}],"container-title":["ACM Transactions on Computer Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2110356.2110361","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2110356.2110361","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T12:23:40Z","timestamp":1750249420000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2110356.2110361"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2012,2]]},"references-count":36,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2012,2]]}},"alternative-id":["10.1145\/2110356.2110361"],"URL":"https:\/\/doi.org\/10.1145\/2110356.2110361","relation":{},"ISSN":["0734-2071","1557-7333"],"issn-type":[{"type":"print","value":"0734-2071"},{"type":"electronic","value":"1557-7333"}],"subject":[],"published":{"date-parts":[[2012,2]]},"assertion":[{"value":"2011-07-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2011-10-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2012-02-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}