Dmesg মধ্যে ভার্চুয়াল কার্নেল মেমরি লেআউটটি কী বোঝায়?


19

"Dmesg এর আউটপুট" দিয়ে যাওয়ার সময় আমি মানগুলির একটি তালিকা দেখতে পেলাম যা আমি সঠিকভাবে বুঝতে সক্ষম নই।

Memory: 2047804k/2086248k available (3179k kernel code, 37232k reserved, 1935k data, 436k init, 1176944k highmem)
virtual kernel memory layout:
    fixmap  : 0xffc57000 - 0xfffff000   (3744 kB)
    pkmap   : 0xff800000 - 0xffa00000   (2048 kB)
    vmalloc : 0xf7ffe000 - 0xff7fe000   ( 120 MB)
    lowmem  : 0xc0000000 - 0xf77fe000   ( 887 MB)
      .init : 0xc0906000 - 0xc0973000   ( 436 kB)
      .data : 0xc071ae6a - 0xc08feb78   (1935 kB)
      .text : 0xc0400000 - 0xc071ae6a   (3179 kB)

মানগুলি থেকে আমি বুঝতে পারি যে আমার কাছে 2 জিবি র‌্যাম রয়েছে (শারীরিক মেমরি)। তবে বাকি জিনিসগুলি আমার কাছে যাদু নম্বর বলে মনে হচ্ছে।

আমি সংক্ষিপ্তভাবে প্রতিটি (ফিক্সম্যাপ, পিকম্যাপ, .. ইত্যাদি) সম্পর্কে জানতে চাই (যদি আরও সন্দেহ হয় তবে আমি প্রত্যেকে পৃথক প্রশ্ন হিসাবে পোস্ট করব)?

কেউ আমাকে তা ব্যাখ্যা করতে পারে?

উত্তর:


22

প্রথমে, একটি 32 বিট সিস্টেমে র‌্যামের ওপরের অংশে কোনও শারীরিক অবস্থান অ্যাক্সেস করার জন্য 0xffffffff( 4'294'967'295) রৈখিক ঠিকানা রয়েছে।
কার্নেল এই ঠিকানাগুলি ব্যবহারকারী এবং কার্নেল স্পেসে বিভক্ত করে।

ব্যবহারকারীর স্থান (উচ্চ স্মৃতি) ব্যবহারকারীর দ্বারা এবং, প্রয়োজনে, কার্নেল দ্বারাও অ্যাক্সেস করা যায়।
হেক্স এবং সিদ্ধান্ত সংকেত মধ্যে ঠিকানা পরিসীমা:

0x00000000 - 0xbfffffff
0 - 3'221'225'471

কার্নেল স্পেস (লো মেমোরি) কেবল কার্নেল দ্বারা অ্যাক্সেস করা যায়।
হেক্স এবং সিদ্ধান্ত সংকেত মধ্যে ঠিকানা পরিসীমা:

0xc0000000 - 0xffffffff
3'221'225'472 - 4'294'967'295

এটার মত:

0x00000000             0xc0000000  0xffffffff 
    |                        |          |
    +------------------------+----------+
    |  User                  |  Kernel  |
    |  space                 |  space   |
    +------------------------+----------+

সুতরাং, আপনি যে মেমরি বিন্যাসটি দেখেছেন dmesgতা কার্নেল স্পেসে রৈখিক ঠিকানাগুলির ম্যাপিংয়ের সাথে মিলে যায়।

প্রথমে .text, .data এবং .init সিকোয়েন্সগুলি যা কার্নেলের নিজস্ব পৃষ্ঠার টেবিলগুলির সূচনা করে (শারীরিক ঠিকানায় রৈখিক অনুবাদ করে) provide

.text : 0xc0400000 - 0xc071ae6a   (3179 kB)

কার্নেল কোডটি রেঞ্জ করে।

.data : 0xc071ae6a - 0xc08feb78   (1935 kB)

কার্নেল ডেটা বিভাগগুলিতে থাকা ব্যাপ্তি।

.init : 0xc0906000 - 0xc0973000   ( 436 kB)

কার্নেলের প্রাথমিক পৃষ্ঠা সারণীগুলি যে ব্যাপ্তিতে থাকে।

(এবং কিছু গতিশীল ডেটা স্ট্রাকচারের জন্য আরও 128 কেবি)

এই সর্বনিম্ন ঠিকানার স্থানটি র‌্যামে কার্নেলটি ইনস্টল করতে এবং এর মূল ডেটা স্ট্রাকচারগুলি শুরু করার জন্য যথেষ্ট যথেষ্ট large

তাদের ব্যবহৃত আকার প্রথম বন্ধনীতে প্রদর্শিত হয়, উদাহরণস্বরূপ কার্নেল কোডটি ধরুন:

0xc071ae6a - 0xc0400000 = 31AE6A

দশমিক স্বীকৃতি হিসাবে, এটি 3'255'914(3179 কেবি)।


দ্বিতীয়ত, আরম্ভের পরে কার্নেল স্পেসের ব্যবহার

lowmem  : 0xc0000000 - 0xf77fe000   ( 887 MB)

লোমেম রেঞ্জটি সরাসরি শারীরিক ঠিকানাগুলি অ্যাক্সেস করতে কার্নেল দ্বারা ব্যবহার করা যেতে পারে।
এটি পুরো 1 জিবি নয়, কারণ নন-কন্টিবিউজ মেমরি বরাদ্দকরণ এবং ফিক্স-ম্যাপযুক্ত লিনিয়ার ঠিকানাগুলি প্রয়োগ করতে কার্নেলের সর্বদা কমপক্ষে 128 এমবি লিনিয়ার ঠিকানা প্রয়োজন।

vmalloc : 0xf7ffe000 - 0xff7fe000   ( 120 MB)

ভার্চুয়াল মেমরির বরাদ্দ একটি অননুমোদিত স্কিমের ভিত্তিতে পৃষ্ঠা ফ্রেম বরাদ্দ করতে পারে। এই স্কিমাটির প্রধান সুবিধাটি হ'ল বাহ্যিক খণ্ডন এড়ানো, এটি অদলবদল অঞ্চল, কার্নেল মডিউল বা কয়েকটি I / O ডিভাইসে বাফার বরাদ্দকরণের জন্য ব্যবহৃত হয়।

pkmap   : 0xff800000 - 0xffa00000   (2048 kB)

স্থায়ী কার্নেল ম্যাপিং কার্নেলকে কার্নেল ঠিকানা স্থানে হাই-মেমরি পৃষ্ঠার ফ্রেমের দীর্ঘস্থায়ী ম্যাপিং স্থাপন করতে দেয়। যখন কোনও হাইএমইএম পৃষ্ঠা ম্যাপ করা হয় কেম্যাপ () ব্যবহার করে, ভার্চুয়াল ঠিকানাগুলি এখান থেকে বরাদ্দ করা হয়।

fixmap  : 0xffc57000 - 0xfffff000   (3744 kB)

এগুলি ফিক্স-ম্যাপযুক্ত লিনিয়ার ঠিকানাগুলি যা লোমেম অ্যাড্রেসের মতো কেবল সর্বশেষ 1 জিবি নয় র‌্যামের কোনও শারীরিক ঠিকানার উল্লেখ করতে পারে। ফিক্স-ম্যাপযুক্ত লিনিয়ার ঠিকানাগুলি তাদের লোমেম এবং পিকেম্যাপ সহকর্মীদের চেয়ে কিছুটা দক্ষ। নির্দিষ্ট ম্যাপিংয়ের জন্য নিবেদিত পৃষ্ঠার টেবিল বর্ণনাকারী রয়েছে এবং kmap_atomic ব্যবহার করে HIGHMEM পৃষ্ঠাগুলির ম্যাপিংগুলি এখান থেকে বরাদ্দ করা হয়েছে।


আপনি যদি খরগোশের গর্তের গভীরে ডুব দিতে চান:
লিনাক্স কার্নেল বোঝা


এই দুর্দান্ত উত্তরের জন্য ধন্যবাদ। আমি জানতে চাইছি কেন কম মেমি 1 জিবি পূর্ণ নয় এবং বাক্যটির পরবর্তী অংশটি সম্পর্কে আরও "কেননা কর্নেলের সর্বদা কমপক্ষে 128 মেগাবাইট রৈখিক ঠিকানা প্রয়োজন হয় অবিসংবাদিত মেমরি বরাদ্দকরণ এবং ফিক্স-ম্যাপযুক্ত লিনিয়ার ঠিকানাগুলি প্রয়োগ করতে।"
সেন

কার্নেল রয়েছে সময়ে সময়ে এক্সেস উচ্চ মেমরি কোডে (RAM এর প্রথম মেগাবাইট উপর ফে BIOS ও ACPI সংক্রান্ত তথ্য বসবাস), তিনি সরাসরি করতে পারবেন না (lowmem এলাকায় মত), অতএব তিনি কম মেমরি ম্যাপ দরকার উচ্চ-মেমরি লিনিয়ার ঠিকানা, 128MB কেবল এই উদ্দেশ্যে সংরক্ষণ করা হয়। ভিমলোক অঞ্চলটি বেশিরভাগ উচ্চ-স্মৃতি অঞ্চলে অস্থায়ীভাবে ম্যাপ করা হয় এবং এটির দ্রুত পুনরায় পুনঃস্থাপন করা হয়।
ওয়াগ

সুতরাং ভার্চুয়াল সিস্টেম কলের জন্য কার্নেল দ্বারা সেট করা পৃষ্ঠাগুলিও ফিক্সম্যাপের একটি অংশ ??? Fffb5000, fffa1000 ইত্যাদি ঠিকানায় পৃষ্ঠায় ঠিক কী রয়েছে তা জানতে চাইলে আমি এই প্রশ্নটিতে চলে এসেছি ... আমি আমার ভার্চুয়াল মেশিন রেকর্ড রিপ্লেতে ওভারহেড পাচ্ছি কারণ অনেক ভার্চুয়াল সিপিইউ এই পৃষ্ঠায় অনেক বেশি অ্যাক্সেস করেছে .... কীভাবে হয় এই ঠিকানায় ঠিক কী আছে তা আমি জানি ...
উপায়টি দিয়ে জবাব দিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.