SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
BHyVeでOSvを起動したい

∼BIOSがなくてもこの先生
きのこるには∼
@syuu1228
これまでのおさらい
•

BHyVeいじってます

•

OSvいじりはじめました

•

BHyVeでOSvを起動したい

•

BIOSが無いから起動しない!(いつもの流れ
OSvとは?
• 仮想化環境上で特定(Java)アプリケーションを効率よく実行す
る事に特化したOS	


• Cloudis Systemsが開発

KVMを開発したQumranetのメンバー

Avi KivityがCTO	


• KVM, Xenで動く→Amazon EC2へデプロイ可能	

• BSDライセンス	

• http://osv.io/	

• https://github.com/cloudius-systems/osv
BHyVeとは?
•

FreeBSD版のLinux KVMのようなもの
•

カーネル側ドライバ・ユーザランドプログラム共にFreeBSD baseツリー上で開発
されている

•

Intel VTを用いたハイパーバイザ

•

KVMと異なりユーザランド側

•

FreeBSD 10.0 RELEASEで同梱

•

ゲストOSとしてFreeBSD, Linux, OpenBSDが起動

(但しx86_64版のOSのみ)

•

http://bhyve.org/

•

詳しくは私のSoftwareDesignの連載を読んで下さい
OSvのブートコードを読んで
BHyVe用のOSローダを書こう
•

OSvのブートコードはこの辺
•

•

•

https://github.com/cloudius-systems/osv/blob/
master/arch/x64/boot16.S
https://github.com/cloudius-systems/osv/blob/
master/arch/x64/boot.S

書いてみたBHyVe用OSローダはこちら
•

https://github.com/syuu1228/bhyveosvload
ゲストOSのダイレクトブート
とは
•

KVMではqemu -kernel vmlinuz -initrd initrd.img

•

BHyVeではbhyveloadコマンド
•

ホストOS上でゲストマシンにFreeBSDカーネル
をロードし各種レジスタやページテーブルを初期
化している

•

ゲストマシンはbhyveコマンド実行時に64bitの
エントリポイントから実行される
BIOSを用いる従来のブートプ
ロセス
•

BIOSがMBRからブートセクタをロード

•

ブートセクタはBIOSコールを用いてブートローダをロード&
実行

•

ブートローダはページテーブルやレジスタを初期化

•

ブートローダはファイルシステムからカーネルを探して読み込
み(IOにはBIOSコールを使用)

•

ブートローダはCPUを64bitモードに切り替えてカーネルの
64bitエントリポイントへジャンプ
ダイレクトブート時のブートプ
ロセス
•

ユーザはホストOS上でゲストOSローダを実行

•

ゲストOSローダはゲストマシンのページテーブルや
ゲストマシンのレジスタを初期化

•

ゲストOSローダはゲストOSディスクイメージから
カーネルを探して読み込み

•

ゲストOSローダは仮想CPUを64bitモードに切り替
えてカーネルの64bitエントリポイントへジャンプ
具体的にはどう実装するのか?
(1)
•

コンソールへの文字列表示(ブートローダではINT10h)

printf()

•

ディスクの読み込み(ブートローダではINT13h)

fd	
  =	
  open(disk_image)

read(fd,	
  buf,	
  len)	
  

•

メモリへの書き込み

ctx	
  =	
  vm_open(vm_name)

ptr	
  =	
  vm_map_gpa(ctx,	
  offset,	
  len)

memcpy(ptr,	
  data,	
  len)
具体的にはどう実装するのか?
(2)
•

レジスタへの書き込み(セグメントレジスタ以外)

ctx	
  =	
  vm_open(vm_name)

vm_set_register(ctx,	
  cpuno,	
  
VM_REG_GUEST_RFLAGS,	
  val)	
  

•

レジスタへの書き込み(セグメントレジスタ)

ctx	
  =	
  vm_open(vm_name)

vm_set_desc(ctx,	
  cpuno,	
  VM_REG_GUEST_CS,	
  
base,	
  limit,	
  access)

vm_set_register(ctx,	
  cpuno,	
  
VM_REG_GUEST_CS,	
  selector)
ここからboot16.Sを翻訳開始
•

https://github.com/cloudius-systems/osv/blob/master/arch/
x64/boot16.S

•

MBR上のブートセクタに存在

•

ここでやっていること
•

ディスクからカーネル引数をロード

•

ディスクからカーネルのELFバイナリをロード

•

BIOSからメモリマップを取得

•

カーネルの32bitエントリポイントへエントリ
disk image layout
nsectors
0
1

MBR (boot16.S)
cmdline

• 汎用ブートローダを使わないこと
によりブート時間短縮	


64
blank?

128
loader.elf

• カーネル引数/ELFバイナリを直接
ディスクに書いている	


• ブートローダはELFバイナリのエン
トリポイントへ自力でジャンプ	

bootfs (bootfs.manifest)

• カーネル引数、メモリサイズの情
報はメモリ上に置いてmultibootと
互換性のある形式でカーネルに渡
す

262144
ZFS (usr.manifest)
ブートコードを翻訳(1)

cmdline load
cmdline	
  =	
  0x7e00	
  

!

mb_info	
  =	
  0x1000	
  
mb_cmdline	
  =	
  (mb_info	
  +	
  16)	
  	
  	
  

!

int1342_boot_struct:	
  #	
  for	
  command	
  line	
  ←	
  DAP	
  
	
  	
  	
  	
  	
  	
  	
  	
  .byte	
  0x10	
  ←	
  size	
  of	
  DAP	
  
	
  	
  	
  	
  	
  	
  	
  	
  .byte	
  0	
  ←	
  unused	
  
	
  	
  	
  	
  	
  	
  	
  	
  .short	
  0x3f	
  	
  	
  #	
  31.5k	
  ←	
  number	
  of	
  sectors	
  to	
  be	
  read	
  
	
  	
  	
  	
  	
  	
  	
  	
  .short	
  cmdline	
  ←	
  segment:offset	
  pointer	
  to	
  the	
  memory	
  buffer(offset側)	
  
	
  	
  	
  	
  	
  	
  	
  	
  .short	
  0	
  ←(segment側)	
  
	
  	
  	
  	
  	
  	
  	
  	
  .quad	
  1	
  ←	
  absolute	
  number	
  of	
  the	
  start	
  of	
  the	
  sectors	
  to	
  be	
  read	
  

!

init:	
  
	
  	
  	
  	
  	
  	
  	
  	
  xor	
  %ax,	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %ax,	
  %ds	
  ←	
  DS	
  =	
  0	
  

!

	
  	
  	
  	
  	
  	
  	
  	
  lea	
  int1342_boot_struct,	
  %si	
  ←	
  DS:SIでDAPを指定	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x42,	
  %ah	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x80,	
  %dl	
  
	
  	
  	
  	
  	
  	
  	
  	
  int	
  $0x13	
  ←	
  INT	
  13h	
  AH=42h:	
  Extended	
  Read	
  Sectors	
  From	
  Drive	
  
	
  	
  	
  	
  	
  	
  	
  	
  movl	
  $cmdline,	
  mb_cmdline	
  ←	
  mb_info-­‐>mb_cmdlineに0x7e00を代入
ブートコードを翻訳(1)

cmdline load
char	
  *cmdline;	
  
struct	
  multiboot_info_type	
  *mb_info;	
  
!

cmdline	
  =	
  vm_map_gpa(ctx,	
  0x7e00,	
  1	
  *	
  
512);	
  
pread(disk_fd,	
  cmdline,	
  0x3f	
  *	
  512,	
  1	
  *	
  
512);	
  
!

mb_info	
  =	
  vm_map_gpa(ctx,	
  0x1000,	
  
sizeof(*mb_info));	
  
mb_info-­‐>cmdline	
  =	
  0x7e00;	
  
ブートコードを翻訳(2)

kernel load
tmp	
  =	
  0x80000	
  
count32:	
  .short	
  4096	
  #	
  in	
  32k	
  units,	
  4096=128MB	
  
int1342_struct:	
  
	
  	
  	
  	
  	
  	
  	
  	
  .byte	
  0x10	
  
	
  	
  	
  	
  	
  	
  	
  	
  .byte	
  0	
  
	
  	
  	
  	
  	
  	
  	
  	
  .short	
  0x40	
  	
  	
  #	
  32k	
  
	
  	
  	
  	
  	
  	
  	
  	
  .short	
  0	
  
	
  	
  	
  	
  	
  	
  	
  	
  .short	
  tmp	
  /	
  16	
  
lba:	
  
	
  	
  	
  	
  	
  	
  	
  	
  .quad	
  128	
  

!

read_disk:	
  
	
  	
  	
  	
  	
  	
  	
  	
  lea	
  int1342_struct,	
  %si	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x42,	
  %ah	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x80,	
  %dl	
  
	
  	
  	
  	
  	
  	
  	
  	
  int	
  $0x13	
  
	
  	
  	
  	
  	
  	
  	
  	
  jc	
  done_disk	
  
	
  	
  	
  	
  	
  	
  	
  	
  cli	
  
	
  	
  	
  	
  	
  	
  	
  	
  lgdtw	
  gdt	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x11,	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  lmsw	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  ljmp	
  $8,	
  $1f	
  
1:	
  
	
  	
  	
  	
  	
  	
  	
  	
  .code32	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x10,	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %ds	
  

	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %es	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $tmp,	
  %esi	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  xfer,	
  %edi	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x8000,	
  %ecx	
  
	
  	
  	
  	
  	
  	
  	
  	
  rep	
  movsb	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %edi,	
  xfer	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x20,	
  %al	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %ds	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %es	
  
	
  	
  	
  	
  	
  	
  	
  	
  ljmpw	
  $0x18,	
  $1f	
  
1:	
  
	
  	
  	
  	
  	
  	
  	
  	
  .code16	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x10,	
  %eax	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %cr0	
  
	
  	
  	
  	
  	
  	
  	
  	
  ljmpw	
  $0,	
  $1f	
  
1:	
  
	
  	
  	
  	
  	
  	
  	
  	
  xor	
  %ax,	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %ax,	
  %ds	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %ax,	
  %es	
  
	
  	
  	
  	
  	
  	
  	
  	
  sti	
  
	
  	
  	
  	
  	
  	
  	
  	
  addl	
  $(0x8000	
  /	
  0x200),	
  lba	
  
	
  	
  	
  	
  	
  	
  	
  	
  decw	
  count32	
  
	
  	
  	
  	
  	
  	
  	
  	
  jnz	
  read_disk	
  ←	
  count32回ループ	
  
done_disk:
ブートコードを翻訳(2)

kernel load
char	
  *target;	
  
!

target	
  =	
  vm_map_gpa(ctx,	
  0x200000,	
  1	
  *	
  
512);	
  
pread(disk_fd,	
  target,	
  0x40	
  *	
  4096	
  *	
  
512,	
  128	
  *	
  512);
ブートコードを翻訳(3)

e820
mb_info	
  =	
  0x1000	
  
mb_mmap_len	
  =	
  (mb_info	
  +	
  44)	
  
mb_mmap_addr	
  =	
  (mb_info	
  +	
  48)	
  
e820data	
  =	
  0x2000	
  

!
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $e820data,	
  %edi	
  ←	
  ES:DI	
   Buffer	
  Pointer	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %edi,	
  mb_mmap_addr	
  ←	
  mb_info-­‐>mb_mmap_addrに0x2000を代入	
  
	
  	
  	
  	
  	
  	
  	
  	
  xor	
  %ebx,	
  %ebx	
  ←	
  Continuation	
  
more_e820:	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $100,	
  %ecx	
  ←	
  Buffer	
  Size	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x534d4150,	
  %edx	
  ←	
  Signature	
  'SMAP'	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0xe820,	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  add	
  $4,	
  %edi	
  
	
  	
  	
  	
  	
  	
  	
  	
  int	
  $0x15	
  ←	
  INT	
  15h,	
  AX=E820h	
  -­‐	
  Query	
  System	
  Address	
  Map	
  
	
  	
  	
  	
  	
  	
  	
  	
  jc	
  done_e820	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %ecx,	
  -­‐4(%edi)	
  
	
  	
  	
  	
  	
  	
  	
  	
  add	
  %ecx,	
  %edi	
  
	
  	
  	
  	
  	
  	
  	
  	
  test	
  %ebx,	
  %ebx	
  
	
  	
  	
  	
  	
  	
  	
  	
  jnz	
  more_e820	
  
done_e820:	
  
	
  	
  	
  	
  	
  	
  	
  	
  sub	
  $e820data,	
  %edi	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %edi,	
  mb_mmap_len	
  ←	
  mb_info-­‐>mb_mmap_lenにe820dataのサイズを代入
ブートコードを翻訳(3)

e820
struct	
  e820ent	
  *e820data;	
  

!
e820data	
  =	
  vm_map_gpa(ctx,	
  0x1100,	
  sizeof(struct	
  e820ent)	
  *	
  3);	
  
e820data[0].ent_size	
  =	
  20;	
  
e820data[0].addr	
  =	
  0x0;	
  
e820data[0].size	
  =	
  654336;	
  
e820data[0].type	
  =	
  1;	
  
e820data[1].ent_size	
  =	
  20;	
  
e820data[1].addr	
  =	
  0x100000;	
  
e820data[1].size	
  =	
  mem_size	
  -­‐	
  0x100000;	
  
e820data[1].type	
  =	
  1;	
  
e820data[2].ent_size	
  =	
  20;	
  
e820data[2].addr	
  =	
  0;	
  
e820data[2].size	
  =	
  0;	
  
e820data[2].type	
  =	
  0;	
  

!
mb_info-­‐>mmap_addr	
  =	
  0x1100;	
  
mb_info-­‐>mmap_length	
  =	
  sizeof(struct	
  e820ent)	
  *	
  3;
ブートコードを翻訳(4)

entry to protected mode
cmdline	
  =	
  0x7e00	
  
target	
  =	
  0x200000	
  
entry	
  =	
  24+target	
  
mb_info	
  =	
  0x1000	
  

!
	
  	
  	
  	
  	
  	
  	
  	
  ljmp	
  $8,	
  $1f	
  
1:	
  
	
  	
  	
  	
  	
  	
  	
  	
  .code32	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $0x10,	
  %ax	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %ds	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %es	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %gs	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %fs	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  %eax,	
  %ss	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $target,	
  %eax	
  ←	
  0x200000をeaxに設定	
  
	
  	
  	
  	
  	
  	
  	
  	
  mov	
  $mb_info,	
  %ebx	
  ←	
  0x1000をebxに設定	
  
	
  	
  	
  	
  	
  	
  	
  	
  jmp	
  *entry	
  ←	
  32bit	
  protected	
  modeのコードを動かすつもりはないので無視
ブートコードを翻訳(4)

entry to protected mode

vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_EAX,	
  
0x200000);

vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_EBX,	
  
0x1000);
ここからboot.Sを翻訳開始
•

https://github.com/cloudius-systems/osv/
blob/master/arch/x64/boot.S

•

カーネルの32bitエントリポイントに存在

•

ここでやっていること
•

GDT, ページテーブルなどを用意してlong
modeへ切り替え
ブートコードを翻訳(5)

GDTの初期化
gdt_desc:	
  
	
  	
  	
  	
  .short	
  gdt_end	
  -­‐	
  gdt	
  -­‐	
  1	
  
	
  	
  	
  	
  .long	
  gdt	
  

!
.align	
  8	
  
gdt	
  =	
  .	
  -­‐	
  8	
  
	
  	
  	
  	
  .quad	
  0x00af9b000000ffff	
  #	
  64-­‐bit	
  code	
  segment	
  
	
  	
  	
  	
  .quad	
  0x00cf93000000ffff	
  #	
  64-­‐bit	
  data	
  segment	
  
	
  	
  	
  	
  .quad	
  0x00cf9b000000ffff	
  #	
  32-­‐bit	
  code	
  segment	
  
gdt_end	
  =	
  .	
  

!
lgdt	
  gdt_desc
ブートコードを翻訳(5)

GDTの初期化
/*	
  gdtrは空いてそうな適当な領域に置く	
  */

uint64_t	
  *gdtr	
  =	
  vm_map_gpa(ctx,	
  0x5000,	
  
sizeof(struct	
  uint64_t)	
  *	
  4);

gdtr[0]	
  =	
  0x0;

gdtr[1]	
  =	
  0x00af9b000000ffff;	
  

gdtr[2]	
  =	
  0x00cf93000000ffff;

gdtr[3]	
  =	
  0x00cf9b000000ffff;




vm_set_desc(ctx,	
  0,	
  VM_REG_GUEST_GDTR,	
  gdtr,	
  
sizeof(struct	
  uint64_t)	
  *	
  4	
  -­‐	
  1,	
  0);	
  
ブートコードを翻訳(6)

ページテーブルの初期化
.data	
  
.align	
  4096	
  
ident_pt_l4:	
  
	
  	
  	
  	
  .quad	
  ident_pt_l3	
  +	
  0x67	
  
	
  	
  	
  	
  .rept	
  511	
  
	
  	
  	
  	
  .quad	
  0	
  
	
  	
  	
  	
  .endr	
  
ident_pt_l3:	
  
	
  	
  	
  	
  .quad	
  ident_pt_l2	
  +	
  0x67	
  
	
  	
  	
  	
  .rept	
  511	
  
	
  	
  	
  	
  .quad	
  0	
  
	
  	
  	
  	
  .endr	
  
ident_pt_l2:	
  
	
  	
  	
  	
  index	
  =	
  0	
  
	
  	
  	
  	
  .rept	
  512	
  
	
  	
  	
  	
  .quad	
  (index	
  <<	
  21)	
  +	
  0x1e7	
  
	
  	
  	
  	
  index	
  =	
  index	
  +	
  1	
  
	
  	
  	
  	
  .endr	
  

!
lea	
  ident_pt_l4,	
  %eax	
  
mov	
  %eax,	
  %cr3
ブートコードを翻訳(6)

ページテーブルの初期化
uint64_t	
  *PT4;

uint64_t	
  *PT3;

uint64_t	
  *PT2;




/*	
  PT4-­‐2は空いてそうな適当な領域に置く	
  */

PT4	
  =	
  vm_map_gpa(ctx,	
  0x4000,	
  sizeof(uint64_t)	
  *	
  512);

PT3	
  =	
  vm_map_gpa(ctx,	
  0x3000,	
  sizeof(uint64_t)	
  *	
  512);

PT2	
  =	
  vm_map_gpa(ctx,	
  0x2000,	
  sizeof(uint64_t)	
  *	
  512);




for	
  (i	
  =	
  0;	
  i	
  <	
  512;	
  i++)	
  {

	
  	
  	
  	
  	
  PT4[i]	
  =	
  (uint64_t)	
  ADDR_PT3;

	
  	
  	
  	
  	
  PT4[i]	
  |=	
  PG_V	
  |	
  PG_RW	
  |	
  PG_U;

	
  	
  	
  	
  	
  PT3[i]	
  =	
  (uint64_t)	
  ADDR_PT2;

	
  	
  	
  	
  	
  PT3[i]	
  |=	
  PG_V	
  |	
  PG_RW	
  |	
  PG_U;

	
  	
  	
  	
  	
  PT2[i]	
  =	
  i	
  *	
  (2	
  *	
  1024	
  *	
  1024);

	
  	
  	
  	
  	
  PT2[i]	
  |=	
  PG_V	
  |	
  PG_RW	
  |	
  PG_PS	
  |	
  PG_U;

}




vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_CR3,	
  0x4000);
ブートコードを翻訳(7)

各種レジスタの設定
#define	
  BOOT_CR0	
  (	
  X86_CR0_PE	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR0_WP	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR0_PG	
  )	
  

!

#define	
  BOOT_CR4	
  (	
  X86_CR4_DE	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PSE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PAE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PGE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PCE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_OSFXSR	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_OSXMMEXCPT	
  )	
  
	
  	
  	
  	
  and	
  $~7,	
  %esp	
  
	
  	
  	
  	
  mov	
  $BOOT_CR4,	
  %eax	
  
	
  	
  	
  	
  mov	
  %eax,	
  %cr4	
  ←	
  PAE有効など	
  
	
  	
  	
  	
  mov	
  $0xc0000080,	
  %ecx	
  
	
  	
  	
  	
  mov	
  $0x00000900,	
  %eax	
  
	
  	
  	
  	
  xor	
  %edx,	
  %edx	
  
	
  	
  	
  	
  wrmsr	
  ←	
  EFERのLMEフラグを立てている	
  
	
  	
  	
  	
  mov	
  $BOOT_CR0,	
  %eax	
  
	
  	
  	
  	
  mov	
  %eax,	
  %cr0	
  ←	
  PE,PG有効など

	
  	
  	
  	
  ljmpl	
  $8,	
  $start64	
  
.code64	
  
.global	
  start64	
  
start64:
ブートコードを翻訳(7)

各種レジスタの設定
vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_RSP,	
  
ADDR_STACK);

vm_set_register(ctx,	
  0,	
  
VM_REG_GUEST_EFER,	
  0x00000d00);

vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_CR4,	
  
0x000007b8);

vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_CR0,	
  
0x80010001);
ブートコードを翻訳(8)

64bitエントリポイント
#define	
  BOOT_CR0	
  (	
  X86_CR0_PE	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR0_WP	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR0_PG	
  )	
  

!

#define	
  BOOT_CR4	
  (	
  X86_CR4_DE	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PSE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PAE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PGE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_PCE	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_OSFXSR	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  |	
  X86_CR4_OSXMMEXCPT	
  )	
  
	
  	
  	
  	
  and	
  $~7,	
  %esp	
  
	
  	
  	
  	
  mov	
  $BOOT_CR4,	
  %eax	
  
	
  	
  	
  	
  mov	
  %eax,	
  %cr4	
  
	
  	
  	
  	
  mov	
  $0xc0000080,	
  %ecx	
  
	
  	
  	
  	
  mov	
  $0x00000900,	
  %eax	
  
	
  	
  	
  	
  xor	
  %edx,	
  %edx	
  
	
  	
  	
  	
  wrmsr	
  
	
  	
  	
  	
  mov	
  $BOOT_CR0,	
  %eax	
  
	
  	
  	
  	
  mov	
  %eax,	
  %cr0

	
  	
  	
  	
  ljmpl	
  $8,	
  $start64	
  
.code64	
  
.global	
  start64	
  	
  ←	
  ここをRIPにしたい	
  
start64:
あっ…

•

このアドレス、リンカで固定されたりしてない
…どうしよ…
よーしパパELFパーサ使っちゃ
うぞー
elf(3)、gelf(3)を使って関数名→アドレスの変換コー
ドを実装
int	
  elfparse_open_memory(char	
  *image,	
  
size_t	
  size,	
  struct	
  elfparse	
  *ep);	
  
int	
  elfparse_close(struct	
  elfparse	
  *ep);	
  
uintmax_t	
  elfparse_resolve_symbol(struct	
  
elfparse	
  *ep,	
  char	
  *name);
ブートコードを翻訳(8)

64bitエントリポイント
struct	
  elfparse	
  ep;

uint64_t	
  start64;




if	
  (elfparse_open_memory(target,	
  0x40	
  *	
  
4096	
  *	
  512,	
  &ep));

start64	
  =	
  elfparse_resolve_symbol(&ep,	
  
"start64");

vm_set_register(ctx,	
  0,	
  VM_REG_GUEST_RIP,	
  
start64);
完成!
#	
  /usr/local/sbin/bhyveosvload	
  -­‐m	
  1024	
  -­‐d	
  ../loader.img	
  osv0	
  
sizeof	
  e820data=48	
  
cmdline=java.so	
  -­‐jar	
  /usr/mgmt/web-­‐1.0.0.jar	
  app	
  prod	
  
start64:0x208f13	
  
ident_pt_l4:0x8d5000	
  
gdt_desc:0x8d8000	
  
#	
  /usr/sbin/bhyve	
  -­‐c	
  1	
  -­‐m	
  1024	
  -­‐AI	
  -­‐H	
  -­‐P	
  -­‐g	
  0	
  -­‐s	
  0:0,hostbridge	
  -­‐s	
  
1:0,virtio-­‐net,tap0	
  -­‐s	
  2:0,virtio-­‐blk,../loader.img	
  -­‐S	
  31,uart,stdio	
  osv0	
  
ACPI:	
  RSDP	
  0xf0400	
  00024	
  (v02	
  BHYVE	
  )	
  
ACPI:	
  XSDT	
  0xf0480	
  00034	
  (v01	
  BHYVE	
  	
  BVXSDT	
  	
  	
  00000001	
  INTL	
  20130823)	
  
ACPI:	
  APIC	
  0xf0500	
  0004A	
  (v01	
  BHYVE	
  	
  BVMADT	
  	
  	
  00000001	
  INTL	
  20130823)	
  
ACPI:	
  FACP	
  0xf0600	
  0010C	
  (v05	
  BHYVE	
  	
  BVFACP	
  	
  	
  00000001	
  INTL	
  20130823)	
  
ACPI:	
  DSDT	
  0xf0800	
  000F2	
  (v02	
  BHYVE	
  	
  BVDSDT	
  	
  	
  00000001	
  INTL	
  20130823)	
  
ACPI:	
  FACS	
  0xf0780	
  00040	
  
Assertion	
  failed:	
  st	
  ==	
  AE_OK	
  (../../drivers/hpet.cc:	
  hpet_init:	
  171)	
  
Aborted
デモ
まとめ
•

ブートローダを注意深く読み解けば簡素なCコードで実装され
たホストOSで動作するゲストOSローダへ翻訳可能である

•

BIOSなんて要らなかった

•

UEFIなんて要らなかった

•

libvmmapiのbindingさえあればスクリプト言語でも実装しう
る

•

実は汎用OSローダとかも開発されつつある

https://github.com/grehan-freebsd/grub2-bhyve

Más contenido relacionado

La actualidad más candente

20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-mainShotaro Uchida
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presenKouhei Maeda
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)Kazuyuki Sato
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitchkazuyas
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Sho Shimizu
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -Go Saito
 
Eucalyptus on OpenStack
Eucalyptus on OpenStackEucalyptus on OpenStack
Eucalyptus on OpenStackirix_jp
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話nullnilaki
 
あるキャッシュメモリの話
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話nullnilaki
 
NetBSD on Google Compute Engine
NetBSD on Google Compute EngineNetBSD on Google Compute Engine
NetBSD on Google Compute EngineRyo ONODERA
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0Satoshi Kume
 

La actualidad más candente (20)

20apr2012 kernelvm7-main
20apr2012 kernelvm7-main20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
Free bsd jail入門
Free bsd jail入門Free bsd jail入門
Free bsd jail入門
 
Open VZ
Open VZOpen VZ
Open VZ
 
Lxc cf201207-presen
Lxc cf201207-presenLxc cf201207-presen
Lxc cf201207-presen
 
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
 
CUDAメモ
CUDAメモCUDAメモ
CUDAメモ
 
Trema での Open vSwitch
Trema での Open vSwitchTrema での Open vSwitch
Trema での Open vSwitch
 
Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像 Open vSwitchソースコードの全体像
Open vSwitchソースコードの全体像
 
LXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoyaLXC入門 - Osc2011 nagoya
LXC入門 - Osc2011 nagoya
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
Eucalyptus on OpenStack
Eucalyptus on OpenStackEucalyptus on OpenStack
Eucalyptus on OpenStack
 
あるmmapの話
あるmmapの話あるmmapの話
あるmmapの話
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
あるキャッシュメモリの話
あるキャッシュメモリの話あるキャッシュメモリの話
あるキャッシュメモリの話
 
NetBSD on Google Compute Engine
NetBSD on Google Compute EngineNetBSD on Google Compute Engine
NetBSD on Google Compute Engine
 
A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0A_road_to_AMBER_simulations_ver_1.0
A_road_to_AMBER_simulations_ver_1.0
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 

Destacado

PCA10 Heres a Scenario For You
PCA10 Heres a Scenario For YouPCA10 Heres a Scenario For You
PCA10 Heres a Scenario For YouPaul Teich
 
Winslow overview june 12 2013
Winslow overview june 12 2013Winslow overview june 12 2013
Winslow overview june 12 2013vbullara
 
Driving And Mobiles Don\'t Mix
Driving And Mobiles Don\'t MixDriving And Mobiles Don\'t Mix
Driving And Mobiles Don\'t MixAlan Bassett
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复Lixun Peng
 
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing GuideContent Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing GuideHeidi Cohen
 
Best photos cnn 2004
Best photos cnn 2004Best photos cnn 2004
Best photos cnn 2004verka 123
 
When worlds collide - leveraging learning content as brand experience
When worlds collide - leveraging learning content as brand experienceWhen worlds collide - leveraging learning content as brand experience
When worlds collide - leveraging learning content as brand experienceBrightwave Group
 
Google Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging FilesGoogle Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging FilesCarl Ocab
 
Workshop webcollege - cursus didactiek
Workshop webcollege - cursus didactiekWorkshop webcollege - cursus didactiek
Workshop webcollege - cursus didactiekJurjen Helmus
 
Good Health And Safety
Good Health And SafetyGood Health And Safety
Good Health And SafetyAlan Bassett
 
Genkidama:実装と課題
Genkidama:実装と課題Genkidama:実装と課題
Genkidama:実装と課題Takuya ASADA
 
A Message To Starbucks
A Message To StarbucksA Message To Starbucks
A Message To StarbucksAJBlumenfeld
 
B E L G R A D E
B E L G R A D EB E L G R A D E
B E L G R A D Everka 123
 

Destacado (20)

GUNDAM ROCK
GUNDAM ROCKGUNDAM ROCK
GUNDAM ROCK
 
PCA10 Heres a Scenario For You
PCA10 Heres a Scenario For YouPCA10 Heres a Scenario For You
PCA10 Heres a Scenario For You
 
Winslow overview june 12 2013
Winslow overview june 12 2013Winslow overview june 12 2013
Winslow overview june 12 2013
 
Driving And Mobiles Don\'t Mix
Driving And Mobiles Don\'t MixDriving And Mobiles Don\'t Mix
Driving And Mobiles Don\'t Mix
 
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
MySQL源码分析.03.InnoDB 物理文件格式与数据恢复
 
Kelly ruggles
Kelly rugglesKelly ruggles
Kelly ruggles
 
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing GuideContent Quality Checklist By Heidi Cohen of Actionable Marketing Guide
Content Quality Checklist By Heidi Cohen of Actionable Marketing Guide
 
Best photos cnn 2004
Best photos cnn 2004Best photos cnn 2004
Best photos cnn 2004
 
When worlds collide - leveraging learning content as brand experience
When worlds collide - leveraging learning content as brand experienceWhen worlds collide - leveraging learning content as brand experience
When worlds collide - leveraging learning content as brand experience
 
Astronomy
AstronomyAstronomy
Astronomy
 
Google Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging FilesGoogle Suppression Attack Lost Blogging Files
Google Suppression Attack Lost Blogging Files
 
Ud22
Ud22Ud22
Ud22
 
Workshop webcollege - cursus didactiek
Workshop webcollege - cursus didactiekWorkshop webcollege - cursus didactiek
Workshop webcollege - cursus didactiek
 
Good Health And Safety
Good Health And SafetyGood Health And Safety
Good Health And Safety
 
Making Learning Alive
Making Learning Alive Making Learning Alive
Making Learning Alive
 
Genkidama:実装と課題
Genkidama:実装と課題Genkidama:実装と課題
Genkidama:実装と課題
 
A Message To Starbucks
A Message To StarbucksA Message To Starbucks
A Message To Starbucks
 
Cool Tools
Cool ToolsCool Tools
Cool Tools
 
Open sourcelibrary
Open sourcelibraryOpen sourcelibrary
Open sourcelibrary
 
B E L G R A D E
B E L G R A D EB E L G R A D E
B E L G R A D E
 

Similar a BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜

x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
as-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズムas-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズムkunihikokaneko1
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディングAkihiro Okuno
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaandroid sola
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月Masahiro Nagano
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -Hayato Mizuno
 
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Kazunari Hara
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Tech Summit 2016
 

Similar a BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜 (20)

LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
as-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズムas-5. サブルーチン呼び出しのメカニズム
as-5. サブルーチン呼び出しのメカニズム
 
仮想記憶の構築法
仮想記憶の構築法仮想記憶の構築法
仮想記憶の構築法
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
カジュアルにソースコードリーディング
カジュアルにソースコードリーディングカジュアルにソースコードリーディング
カジュアルにソースコードリーディング
 
PF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsolaPF部2011年12月勉強会.androidsola
PF部2011年12月勉強会.androidsola
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
メルカリのデータベース戦略 / PHPとMySQLの怖い話 MyNA会2015年8月
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~Native x Webでいいとこどり開発 ~ピグトーク~
Native x Webでいいとこどり開発 ~ピグトーク~
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動Hol012 windowsコンテナー始動
Hol012 windowsコンテナー始動
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
Aaなゲームをjsで
AaなゲームをjsでAaなゲームをjsで
Aaなゲームをjsで
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
From IA-32 to avx-512
From IA-32 to avx-512From IA-32 to avx-512
From IA-32 to avx-512
 

Más de Takuya ASADA

Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークTakuya ASADA
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」Takuya ASADA
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜Takuya ASADA
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingTakuya ASADA
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3Takuya ASADA
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallTakuya ASADA
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装Takuya ASADA
 
Linux network stack
Linux network stackLinux network stack
Linux network stackTakuya ASADA
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminalTakuya ASADA
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがないTakuya ASADA
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレットTakuya ASADA
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2Takuya ASADA
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1Takuya ASADA
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorTakuya ASADA
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性Takuya ASADA
 

Más de Takuya ASADA (20)

Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meeting
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3
 
OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
 
OSv噺
OSv噺OSv噺
OSv噺
 
OSvの概要と実装
OSvの概要と実装OSvの概要と実装
OSvの概要と実装
 
Linux network stack
Linux network stackLinux network stack
Linux network stack
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレット
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性
 

Último

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Último (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜