2012-03-01から1ヶ月間の記事一覧

os::random()

乱数生成 //(jdk7/hotspot/src/share/vm/runtime/os.cpp) long os::random() { /* standard, well-known linear congruential random generator with * next_rand = (16807*seed) mod (2**31-1) * see * (1) "Random Number Generators: Good Ones Are Hard …

os::free(void *memblock)

引数で渡されたメモリ領域を解放する //(jdk7/hotspot/src/share/vm/runtime/os.cpp) void os::free(void *memblock) { NOT_PRODUCT(inc_stat_counter(&num_frees, 1)); #ifdef ASSERT if (memblock == NULL) return; if ((intptr_t)memblock == (intptr_t)M…

os::realloc(void *memblock, size_t size)

引数で渡されたmemblockのサイズを変更する 新たにsize分の領域にする //(jdk7/hotspot/src/share/vm/runtime/os.cpp) Void* os::realloc(void *memblock, size_t size) { #ifndef ASSERT NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_…

os::malloc(size_t size)

引数で渡されたサイズ(単位はバイト)分のメモリを確保する //(jdk7/hotspot/src/share/vm/runtime/os.cpp) void* os::malloc(size_t size) { NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); if (si…

os::free_thread(OSThread* osthread)

カレントスレッドを解放する //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) // Free Linux resources related to the OSThread void os::free_thread(OSThread* osthread) { assert(osthread != NULL, "osthread not set"); if (Thread::current()-…

os::initialize_thread()

カレントスレッドを初期化する Linux版、Windows版では実装されていない //Linux版(jdk7/hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp) void os::initialize_thread() { // Nothing to do. } ちなみにSolaris版はこんな感じ。 //Solaris版(jdk7/hotspo…

os::start_thread(Thread* thread)

引数で渡されたthreadをOSスレッドに結びつけて実行可能状態にする //Linux版(jdk7/hotspot/src/share/vm/runtime/os.cpp) void os::start_thread(Thread* thread) { // guard suspend/resume MutexLockerEx ml(thread->SR_lock(), Mutex::_no_safepoint_che…

os::create_main_thread(JavaThread* thread)

引数で渡されたthread(Javaスレッド)をOSスレッドに結びつける pthread_selfはカレントスレッドIDを返す。詳細はこちらを参照 http://linuxjm.sourceforge.jp/html/glibc-linuxthreads/man3/pthread_self.3.html create_attached_threadはthread(Javaスレッ…

os::pd_start_thread(Thread* thread)

引数で渡されたtheradに対応したOSスレッドをスタートさせる threadはプラットフォーム非依存スレッド。 thread->osthread()で取得できるOSThreadオブジェクトがプラットフォーム依存スレッド メソッド名の先頭の”pd”はPlatformDependent(プラットフォーム…

os::create_thread(Thread* thread, ThreadType thr_type, size_t stack_size)

スレッドを生成する 引数であるthr_typeはスレッドタイプを意味する タイプ 説明 vm_thread vmスレッド cgc_thread コンカレントGCスレッド pgc_thread 並列GCスレッド java_thread javaスレッド compiler_thread コンパイラスレッド watcher_thread watcher…

os::current_process_id()

カレントプロセスが実行されているプロセッサのプロセッサIDを取得する //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) int os::current_process_id() { // Under the old linux thread library, linux gives each thread // its own process id. Be…

os::current_thread_id();

カレントスレッドのスレッドIDを取得する pthread_selfはこちらを参照 http://linuxjm.sourceforge.jp/html/glibc-linuxthreads/man3/pthread_self.3.html Solaris版と実装はほぼ同じ //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) intx os::curren…

os::bind_to_processor(uint processor_id);

引数で渡されたプロセッサIDにカレントプロセスをバインドする Linux版、Windows版では未実装。 //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) bool os::bind_to_processor(uint processor_id) { // Not yet implemented. return false; } ちなみに…

os::distribute_processes(uint length, uint* distribution)

プロセッサにプロセスを割り当てる。 LinuxやWindows版では実装されていない。Solaris版では実装されている。 //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) Bool os::distribute_processes(uint length, uint* distribution) { // Not yet impleme…

os::active_processor_count()

プロセッサのホットプラグイン/アウトに対応して、アクティブなCPUを取得する //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) int os::active_processor_count() { // Linux doesn't yet have a (official) notion of processor sets, // so just r…

os::set_processor_count(int count)

プロセッサ数を設定する 引数countで渡される値はsysconf(_SC_NPROCESSORS_CONF)により取得できる 詳細はman sysconfにて static void set_processor_count(int count) { _processor_count = count; }

os::processor_count()

プロセッサ数(__processor_count)を返す __processor_count値はos::set_processor_countメソッドにて設定される プロセッサのホットプラグイン/プラグアウトに対応してアクティブなプロセッサ数を得ようとする場合はos::active_processor_countメソッドを…

os::create_attached_thread(JavaThread* thread)

引数で渡されたJavaスレッドをOSスレッドに結びつける //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) Bool os::create_attached_thread(JavaThread* thread) { #Ifdef ASSERT thread->verify_not_published(); #endif // Allocate the OSThread obj…

os::realign_memory(char *addr, size_t bytes, size_t alignment_hint)

引数で渡されたアドレス範囲がHugePage上に割り当てられている事をカーネルに伝える 1ページは通常は4KBであるが、HugaPageは2MB //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) void os::realign_memory(char *addr, size_t bytes, size_t alignmen…

os::free_memory(char *addr, size_t bytes)

引数で渡されたアドレス範囲のメモリを解放する 厳密に言うと”解放して良い”というヒントをカーネルに与える //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) void os::free_memory(char *addr, size_t bytes) { //glibcのmadviseを呼び出す //詳細 -…

os::unmap_memory(char* addr, size_t bytes)

引数で渡されたアドレス範囲のメモリマップを解除する //Linux版(jdk7/hotspot/src/os/linux/vm/os_linux.cpp) // Unmap a block of memory. bool os::unmap_memory(char* addr, size_t bytes) { //glibcのmumapを呼び出す //詳細 -> http://linuxjm.sourcef…

os::remap_memory(...)

ファイルやデバイスを再メモリマッピングする 実装的には単にmap_memoryを呼び出すだけ 以下、引数の説明 fd--メモリマッピングするファイルのファイルディスクリプタ filename--ファイル名 file_offset--ファイルのオフセット(このオフセット以降がメモリ…

os::map_memory(...)

ファイルやデバイスをメモリマッピングする 以下、引数の説明 fd--メモリマッピングするファイルのファイルディスクリプタ filename--ファイル名 file_offset--ファイルのオフセット(このオフセット以降がメモリマッピングされる) addr--マッピングされる…