The document discusses OpeLa, a programming system created by the author to build an entire operating system and programming language from scratch. OpeLa stands for Operating and Language processing system. The author provides background on their involvement in OS and language development communities. They describe initial steps taken in OpeLa, such as using the SDL library to display graphics. Considerations for calling external functions from OpeLa are also mentioned.
Brief introduction to PC timers: PIT, RTC, HPET, ACPI PM Timer, Local APIC Timer, TSC. This slides also describes how to use ACPI PM Timer and Local APIC Timer.
This presentation describes USB 3 host driver structure.
The host driver has 3 layers: host controller driver, bus driver, and class driver.
Recent days, hobby OS creators must implement USB host driver to support keyboard and mouse.
37. class A {
public:
virtual void foo();
virtual void bar();
};
class B : public A {
public:
virtual void foo();
};
A's vtable
B's vtable
A::foo
A::bar
B::foo
A::bar
38. class A {
public:
virtual void foo();
virtual void bar();
};
class B : public A {
public:
virtual void foo();
};
A's vtable
B's vtable
A::foo
A::bar
B::foo
A::bar
B instance
vptr
p1
A* p1 = new B();
39. class A {
public:
virtual void foo();
virtual void bar();
};
class B : public A {
public:
virtual void foo();
};
A's vtable
B's vtable
A::foo
A::bar
B::foo
A::bar
B instance
vptr
A instance
vptr
p1
p2
A* p1 = new B();
A* p2 = new A();
40. class A {
public:
virtual void foo();
virtual void bar();
};
class B : public A {
public:
virtual void foo();
};
A's vtable
B's vtable
A::foo
A::bar
B::foo
A::bar
B instance
vptr
A instance
Aのポインタ経由でも
vptr
正しくBのメソッドを呼べる
p1
p2
A* p1 = new B();
A* p2 = new A();
41. 仮想関数テーブル実物
class Base
{
public:
virtual ~Base() {}
virtual int foo() = 0;
virtual int bar() {return 42;}
};
0 (int (*)(...))0
8 (int (*)(...))(& _ZTI4Base)
16 (int (*)(...))Base::~Base
24 (int (*)(...))Base::~Base
32 (int (*)(...))__cxa_pure_virtual
40 (int (*)(...))Base::bar
class MyClass : public Base
{
public:
virtual int foo() {return 43;}
};
0
8
16
24
32
40
(int (*)(...))0
(int (*)(...))(& _ZTI7MyClass)
(int (*)(...))MyClass::~MyClass
(int (*)(...))MyClass::~MyClass
(int (*)(...))MyClass::foo
(int (*)(...))Base::bar
42. 仮想関数テーブル実物
class Base
{
public:
virtual ~Base() {}
virtual int foo() = 0;
virtual int bar() {return 42;}
};
0 (int (*)(...))0
8 (int (*)(...))(& _ZTI4Base)
16 (int (*)(...))Base::~Base
24 (int (*)(...))Base::~Base
32 (int (*)(...))__cxa_pure_virtual
40 (int (*)(...))Base::bar
自分で実装
class MyClass : public Base
{
public:
virtual int foo() {return 43;}
};
0
8
16
24
32
40
(int (*)(...))0
(int (*)(...))(& _ZTI7MyClass)
(int (*)(...))MyClass::~MyClass
(int (*)(...))MyClass::~MyClass
(int (*)(...))MyClass::foo
(int (*)(...))Base::bar