タグ

codereadingとmemoryに関するmanabouのブックマーク (3)

  • xv6のメモリ管理周りのコードリーディング - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    xv6のページング周りをちょっと見てたので記録をφ(..)メモメモ 参照したドキュメントはbook-rev10.pdfです。 book-rev10.pdfのP21、 Figure 1-2にxv6のメモリレイアウトがあります。 仮想アドレスの0から0x80000000がユーザー空間で、0x80000000〜0xFFFFFFFFがカーネル空間ですね。カーネル空間のうち先頭の0x100000バイトはBIOSの領域となってます。 カーネルのアドレス空間はvm.cにあるkmap構造体で管理してます。 static struct kmap { void *virt; uint phys_start; uint phys_end; int perm; } kmap[] = { { (void*)KERNBASE, 0, EXTMEM, PTE_W}, // I/O space { (void*)KERN

    xv6のメモリ管理周りのコードリーディング - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • Linux 2.0.40の頃のkmalloc() - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    たまには古いカーネルでも読んでみましょう的なところで、Linux 2.0.40の頃はkmalloc()はどんな実装だったのかというところでも見てみましょう。最近のkmalloc()の実装は使用しているディストーションが採用しているスラブアローケータの__kmalloc()の実装を見てみましょう。今のkmalloc()はスラブアローケータを使用しています。SLUBだとこんな感じです。 で、Linux 2.0.40はkernel.orgのファイル作成日時で見ると08-Feb-2004 07:13となっているので、12年前にリリースされたんですね。このバージョンが2.0系の最終バージョンです。 この当時のkmallocはスラブアローケータは使用していないけど、スラブアローケータ的に要求されたサイズを一番近い2の累乗サイズに切り上げて使っています。サイズはblocksizeという変数で管理してます

    Linux 2.0.40の頃のkmalloc() - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • 先読み処理 - Linuxの備忘録とか・・・(目次へ)

    先読みとは、page単位の実際の読込みサイズを拡大して読込む事で、ブロックデバイス登録でblk_alloc_queue_node()がコールされる際、BIOリストが作成されるrequest_queueq->backing_dev_info.ra_pagesに先読みサイズ最大値が設定されます。先読みサイズ最大値ra_pagesは、実読込みサイズ+先読みサイズで、実サイズを読み込んで、先読みサイズ分を読み込むのでなく、読み込み際は、実サイズ/読み込みサイズ関係なく、両者を合わせたサイズ値で読み込みます。 最大サイズのデフォルトはVM_MAX_READAHEAD=128で、page数(VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE=32 pageとなります。ブロックデバイススペシャルファイルのioctl()のBLKRASETで設定できます。この先読みサイズ情

  • 1