অভ্যন্তরীণভাবে প্রিন্টক ঠিক কীভাবে কাজ করে?


10

আমি জানি printfওএসের কাজটি করার জন্য সাহায্যের দরকার।

আমি আরও জানি printfযে কোনও লাইব্রেরি নেই বলে লিনাক্স উত্স কোডে কাজ করে না। এবং তাই আমরা printkডিবাগিং জন্য আছে ।

printkওএস এখনও বুট করার সময় কীভাবে কাজ করবে?

উত্তর:


11

এই রেফারেন্সটিতে আপনার প্রশ্নের উত্তর রয়েছে বলে শিরোনাম: লিনাক্স কার্নেল বিকাশ দ্বিতীয় সংস্করণ

উদ্ধৃতাংশ

printk ()

কার্নেল মুদ্রণ ফাংশন, printk()সি লাইব্রেরি printf()ফাংশনের সাথে প্রায় একই রকম আচরণ করে। প্রকৃতপক্ষে, এই বই জুড়ে আমরা কোনও বাস্তব পার্থক্য ব্যবহার করি নি। বেশিরভাগ উদ্দেশ্যগুলির জন্য, এটি ঠিক আছে; printk()কেবলমাত্র কার্নেলের বিন্যাসিত মুদ্রণ ফাংশনের নাম। তবে এর কিছুটা পার্থক্য রয়েছে।

মুদ্রণের দৃ Rob়তা ()

printk()মঞ্জুরির জন্য দ্রুত গৃহীত এক সম্পত্তি হ'ল তার দৃust়তা। printk()ফাংশন প্রায় যে কোন সময়ে কার্নেল যে কোন জায়গা থেকে callable হয়। এটিকে বাধা বা প্রক্রিয়া প্রসঙ্গে বলা যেতে পারে। লক ধরে রাখার সময় এটি বলা যেতে পারে। একাধিক প্রসেসরের মাধ্যমে এটি একসাথে বলা যেতে পারে, তবুও এটির জন্য কোনও লক ধরে রাখার প্রয়োজন নেই।

এটি একটি স্থিতিস্থাপক কাজ। এটি গুরুত্বপূর্ণ কারণ দরকারীতা printk()যে এটি সর্বদা সেখানে থাকে এবং সর্বদা কাজ করে তা নির্ভর করে।

প্রিন্টকের ননব্রাস্টনেস ()

এর দৃust়তার বর্মটিতে একটি চিংকের printk()উপস্থিতি রয়েছে। কনসোল শুরুর আগে কার্নেল বুট প্রসেসের একটি নির্দিষ্ট পয়েন্টের আগে এটি ব্যবহারযোগ্য নয়। আসলে, যদি কনসোলটি আরম্ভ করা না হয় তবে আউটপুটটি কোথায় যাওয়ার কথা?

এটি সাধারণত কোনও সমস্যা হয় না, যদি না আপনি বুট প্রক্রিয়াটির প্রথম দিকে সমস্যাগুলি ডিবাগ করেন (উদাহরণস্বরূপ, ইন setup_arch(), যা আর্কিটেকচার-নির্দিষ্ট সূচনা সম্পাদন করে)। এই ধরনের ডিবাগিংটি শুরু করা একটি চ্যালেঞ্জ এবং কোনও প্রিন্ট পদ্ধতির অনুপস্থিতি কেবল সমস্যাটিকে জটিল করে তোলে।

কিছু আশা আছে, কিন্তু অনেক না। হার্ড আর্কিটেকচার হ্যাকাররা বাহ্যিক বিশ্বের সাথে যোগাযোগের জন্য কাজ করে এমন হার্ডওয়্যার (যা একটি সিরিয়াল বন্দর) ব্যবহার করে। আমাকে বিশ্বাস করুন এটি বেশিরভাগ মানুষের পক্ষে মজাদার নয়। কিছু সমর্থিত আর্কিটেকচার একটি বুদ্ধিমান সমাধান প্রয়োগ করে, তবে অন্যদের (i386 অন্তর্ভুক্ত) প্যাচগুলি উপলব্ধ রয়েছে যা দিনটিও সংরক্ষণ করে।

সমাধান হল printk()খুব বুট প্রক্রিয়া শুরুর দিকে কনসোলে বৈকল্পিক যে করতে পারেন আউটপুট: early_printk()। আচরণটি একই রকম printk(), কেবলমাত্র নাম এবং এর আগে কাজ করার দক্ষতা পরিবর্তিত হয়। এটি কোনও বহনযোগ্য সমাধান নয়, কারণ সমস্ত সমর্থিত আর্কিটেকচারে এ জাতীয় পদ্ধতি প্রয়োগ করা হয়নি। এটি যদি হতে পারে তবে এটি আপনার সেরা বন্ধু হতে পারে।

বুট প্রক্রিয়াটির খুব প্রথম দিকে আপনাকে কনসোলে লেখার প্রয়োজন না থাকলে আপনি printk()সর্বদা কাজের উপর নির্ভর করতে পারেন ।


4

ওএস তখনও বুট করা অবস্থায় প্রিন্টক কীভাবে কাজ করে?

printk()সম্ভব হলে কনসোলে যান এবং অগ্রাধিকার যথেষ্ট বেশি; আমি নিশ্চিত নই যে কার্নেল কোন সম্ভাব্যতা তৈরি করতে কোনও ভিটি আরম্ভ করে তবে এটি স্পষ্টতই তাড়াতাড়ি।

[src]/kernel/printk/printk.cবেশ ভাল নথিভুক্ত। কনসোল অ্যাক্সেস semaphores মাধ্যমে নিয়ন্ত্রিত বলে মনে হচ্ছে। /dev/dmsgঅগ্রাধিকার নির্বিশেষে বার্তাটি ইনজেক্ট করা হয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.