<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=ACPI</id>
	<title>ACPI - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="http://junhoahn.kr/noriwiki/index.php?action=history&amp;feed=atom&amp;title=ACPI"/>
	<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;action=history"/>
	<updated>2026-05-24T23:04:50Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;diff=449&amp;oldid=prev</id>
		<title>2023년 2월 11일 (토) 02:12에 Ahn9807님의 편집</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;diff=449&amp;oldid=prev"/>
		<updated>2023-02-11T02:12:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023년 2월 11일 (토) 02:12 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;1번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[분류: CPU]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[분류: CPU]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[분류: 디바이스]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 개요 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 개요 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ahn9807</name></author>
	</entry>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;diff=411&amp;oldid=prev</id>
		<title>2023년 2월 11일 (토) 01:53에 Ahn9807님의 편집</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;diff=411&amp;oldid=prev"/>
		<updated>2023-02-11T01:53:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2023년 2월 11일 (토) 01:53 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;1번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[분류: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;주변장치&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[분류: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CPU&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 개요 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 개요 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Ahn9807</name></author>
	</entry>
	<entry>
		<id>http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;diff=407&amp;oldid=prev</id>
		<title>Ahn9807: 새 문서: 분류: 주변장치  == 개요 == ACPI (Advanced Configuration and Power Interface)는 Power Management를 하기 위한 주변장치의 일종이다. ACPI는 운영체제가 어느정도의 파워가 지금 공급되고 있는지, CPU Fan speed, thermal zone, battery level과 같은 정보를 가져올 수 있게 한다. 또한 ACPI는 SMP, NUMA와 같은 Multiprocessing 정보또한 OS에게 제공한다. 이러한 정보는 MP floating table에도 존재하지만, Modern...</title>
		<link rel="alternate" type="text/html" href="http://junhoahn.kr/noriwiki/index.php?title=ACPI&amp;diff=407&amp;oldid=prev"/>
		<updated>2023-02-11T01:51:19Z</updated>

		<summary type="html">&lt;p&gt;새 문서: &lt;a href=&quot;/noriwiki/index.php?title=%EB%B6%84%EB%A5%98:%EC%A3%BC%EB%B3%80%EC%9E%A5%EC%B9%98&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;분류:주변장치 (없는 문서)&quot;&gt;분류: 주변장치&lt;/a&gt;  == 개요 == ACPI (Advanced Configuration and Power Interface)는 Power Management를 하기 위한 주변장치의 일종이다. ACPI는 운영체제가 어느정도의 파워가 지금 공급되고 있는지, CPU Fan speed, thermal zone, battery level과 같은 정보를 가져올 수 있게 한다. 또한 ACPI는 SMP, NUMA와 같은 Multiprocessing 정보또한 OS에게 제공한다. 이러한 정보는 MP floating table에도 존재하지만, Modern...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[분류: 주변장치]]&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
ACPI (Advanced Configuration and Power Interface)는 Power Management를 하기 위한 주변장치의 일종이다. ACPI는 운영체제가 어느정도의 파워가 지금 공급되고 있는지, CPU Fan speed, thermal zone, battery level과 같은 정보를 가져올 수 있게 한다. 또한 ACPI는 SMP, NUMA와 같은 Multiprocessing 정보또한 OS에게 제공한다. 이러한 정보는 MP floating table에도 존재하지만, Modern OS는 대부분 ACPI에서 먼저 SMP정보를 가져온다.&lt;br /&gt;
&lt;br /&gt;
== ACPI 접근 ==&lt;br /&gt;
ACPI는 BIOS 메모리에 저장되어 있다. [[EBDA]]&lt;br /&gt;
 BIOS메모리는 메모리 영역중 BIOS가 초기화 하는 부분이며, 0x40e, 혹은 0xffffff 아래에 ACPI가 저장되어 있다.&lt;br /&gt;
ACPI는 두가지의 부분으로 구성되어 있는데, 첫 번쨰 부분은 OS가 부트과정에서 CPU configuration을 위해서 사용되는 정보가 저장되어 있는 부분과 (CPUs, APIC정보, NUMA 메모리 구조...) ACPI환경을 구성하고 있는 [[AML]]코드가 저장된 부분으로 구성된다. ACPI를 이용하기 위해서는 OS는 반드시 [[RSDP]]에 접근하여 정보를 가져와야 한다. &lt;br /&gt;
&lt;br /&gt;
RSDP가 발견되고, Verfication이 되면, RSDP (root system description pointer)은 RSDT(root system description table)에 대한 포인터를 가지고 있다. (XSDT _ eXtended System description table 는 최신 하드웨어에 내장됨) RSDT나 XSDT에는 해당하는 정보가 들어 있게 된다. XSDT는 RSDP를 호환할 수 있으며 RSDP의 rev필드에 0이면 rsdp1.0 아니면 XSDT를 사용하는 rsdp2.0이다.&lt;br /&gt;
&lt;br /&gt;
== 코드 ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
static struct acpi_rsdt* global_rsdt_pointer = NULL;&lt;br /&gt;
&lt;br /&gt;
static inline int check_rsdp(uint8_t *rsdp) {&lt;br /&gt;
        uint8_t check = 0;&lt;br /&gt;
        size_t size = sizeof(struct acpi_rsdp);&lt;br /&gt;
&lt;br /&gt;
        if(!strncmp(rsdp, &amp;quot;RSD PTR &amp;quot;, 8)) {&lt;br /&gt;
                while(size--) check += (int8_t) *rsdp++;&lt;br /&gt;
                return check;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static struct acpi_rsdp * get_rsdt() {&lt;br /&gt;
        // Get Extended BIOS data area pointer address&lt;br /&gt;
        uintptr_t ebda_pa = *(uint16_t *)P2V(0x40e);&lt;br /&gt;
        uint8_t *ebda = (uint8_t *)P2V(ebda_pa);&lt;br /&gt;
        uint8_t *ebda_cursor = ebda;&lt;br /&gt;
&lt;br /&gt;
        // Get virtual address of EBDA&lt;br /&gt;
        printf(&amp;quot;0x%x\n&amp;quot;, ebda);&lt;br /&gt;
&lt;br /&gt;
        while(ebda_cursor &amp;lt;= ebda + 0x400) {&lt;br /&gt;
                if(!check_rsdp(ebda_cursor)) {&lt;br /&gt;
                        return (struct acpi_rsdp *)ebda_cursor;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                ebda_cursor += 0x10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ebda_cursor = (uint8_t *)0x000e0000;&lt;br /&gt;
        while(ebda_cursor &amp;lt; P2V(0x000fffff)) {&lt;br /&gt;
                if(!check_rsdp(ebda_cursor)) {&lt;br /&gt;
                        return (struct acpi_rsdp *)ebda_cursor;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                ebda_cursor += 0x10;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void acpi_init() {&lt;br /&gt;
        struct acpi_rsdp* rsdp = get_rsdt();&lt;br /&gt;
        global_rsdt_pointer = (struct acpi_rsdt *)P2V(rsdp-&amp;gt;rsdt &amp;amp; 0xffffffff);&lt;br /&gt;
&lt;br /&gt;
        // This rsdt area is marked as 0x1 in multiboot2 mma flags.&lt;br /&gt;
        // Thus memory_init ignore this area as an allocation point.&lt;br /&gt;
        // Also physical memory manager ignore this area for managing.&lt;br /&gt;
        // So we have to set VMM to use this area.&lt;br /&gt;
        uint64_t addr = (uint64_t)P2V(global_rsdt_pointer);&lt;br /&gt;
        vmm_set_page(kernel_P4, addr, rsdp-&amp;gt;rsdt, PAGE_PRESENT);&lt;br /&gt;
        vmm_activate(kernel_P4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct acpi_rsdt *acpi_get_rsdt(char signature[4]) {&lt;br /&gt;
        struct acpi_rsdt* rsdt = global_rsdt_pointer;&lt;br /&gt;
&lt;br /&gt;
        if(!rsdt) {&lt;br /&gt;
                return NULL;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        int entries = (rsdt-&amp;gt;header.length - sizeof(rsdt-&amp;gt;header)) / sizeof(uint32_t);&lt;br /&gt;
&lt;br /&gt;
        for(int i = 0; i &amp;lt; entries; ++i) {&lt;br /&gt;
                struct acpi_rsdt_header *hdr = (struct acpi_rsdt_header *)P2V(rsdt-&amp;gt;sdt[i]);&lt;br /&gt;
&lt;br /&gt;
                if(!strncmp(hdr-&amp;gt;signature, signature, 4)) {&lt;br /&gt;
                        return hdr;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return NULL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ahn9807</name></author>
	</entry>
</feed>