ইউনিক্স সময়টি আপনার কম্পিউটারে পরিমাপ করা হয়, ইউএনআইএক্স চলমান।
এই উত্তরটি আপনাকে জানতে পারে যে কোর্ডিনটেড ইউনিভার্সাল টাইম (ইউটিসি), আন্তর্জাতিক পারমাণবিক সময় (টিআইএআই) এবং এসআই দ্বিতীয়টি কী। এগুলি ব্যাখ্যা করা ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জের সুযোগের বাইরে । এটি পদার্থবিজ্ঞান বা জ্যোতির্বিজ্ঞানের স্ট্যাক এক্সচেঞ্জগুলি নয়।
হার্ডওয়্যার
আপনার কম্পিউটারে বিভিন্ন অসিলেটর রয়েছে যা ঘড়ি এবং টাইমার চালায়। ঠিক এটির যা আছে তা তার স্থাপত্যের উপর নির্ভর করে কম্পিউটার থেকে কম্পিউটারে পরিবর্তিত হয়। তবে সাধারণত, এবং খুব সাধারণ শব্দে:
- কোথাও একটি প্রোগ্রামেবল ইন্টারভাল টাইমার (পিআইটি) রয়েছে, যা প্রদত্ত সংখ্যক দোলনা গণনা এবং কেন্দ্রীয় প্রক্রিয়াকরণ ইউনিটে একটি বাধাকে ট্রিগার করতে প্রোগ্রাম করা যেতে পারে।
- কেন্দ্রীয় প্রসেসরের একটি চক্র কাউন্টার রয়েছে যা সম্পাদিত প্রতিটি নির্দেশ চক্রের জন্য কেবল 1 টি গণনা করে।
অপারেশন তত্ত্ব, খুব বিস্তৃত ভাষায়
অপারেটিং সিস্টেমের কার্নেল তোলে গর্তের ব্যবহার জেনারেট করতে এঁটেল পোকা । এটি পিআইটিকে ফ্রি-রান করার জন্য সেট করে, সময়ের ব্যবধানের জন্য সঠিক সংখ্যার দোলনের সংখ্যা গণনা করে, বলুন, একটি সেকেন্ডের একশত ভাগ, একটি বিঘ্ন সৃষ্টি করে এবং তারপরে পুনরায় গণনাটি পুনরায় সেট করতে। এটিতে বিভিন্নতা রয়েছে তবে সংক্ষেপে এটি একটি নির্দিষ্ট ফ্রিকোয়েন্সি সহ একটি টিক বিঘ্ন ঘটায় ।
সফ্টওয়্যারগুলিতে, কার্নেল প্রতিটি টিককে কাউন্টার বাড়ায়। এটি টিক ফ্রিকোয়েন্সি জানে, কারণ এটি পিআইটি প্রথম স্থানে প্রোগ্রাম করেছিল। সুতরাং এটি জানে কত টিক্স একটি সেকেন্ড আপ। এটি কখন সেকেন্ডে গণনা করে এমন কাউন্টার বাড়ানো যায় তা জানতে এটি ব্যবহার করতে পারে। এই আধুনিকটি "ইউনিক্স সময়" সম্পর্কে কার্নেলের ধারণা। এটি, সত্যই, কেবলমাত্র এসআই সেকেন্ডের মধ্যে একটির তার নিজস্ব ডিভাইসগুলিতে ছেড়ে গেলে উপরের দিকে গণনা করে।
চারটি বিষয় এটিকে জটিল করে তোলে, যা আমি খুব সাধারণ শর্তে উপস্থাপন করতে যাচ্ছি।
হার্ডওয়্যার নিখুঁত নয়। একটি পিআইটি যার ডেটা শীট বলে যে এটির এন হার্টজের অসিলেটর ফ্রিকোয়েন্সি রয়েছে তার পরিবর্তে (বলে) এন .00002 হার্টজ এর ফ্রিকোয়েন্সি থাকতে পারে , এর স্পষ্ট পরিণতি হতে পারে।
এই স্কিমটি পাওয়ার ম্যানেজমেন্টের সাথে খুব খারাপভাবে হস্তক্ষেপ করছে, কারণ ভেরিয়েবলের সংখ্যা বাড়ানোর চেয়ে সিপিইউ প্রতি সেকেন্ডে কয়েকবার জেগে আছে। তাই কিছু অপারেটিং সিস্টেমে "টিকলেস" ডিজাইন হিসাবে পরিচিত have পিটিটি প্রতিটি টিকের জন্য একটি বাধা প্রেরণের পরিবর্তে, কার্নেলটি কাজ করে (নিম্ন স্তরের সময়সূচী থেকে) কত টিকিট চলছে কোনও থ্রেড কোয়ান্টা না দিয়ে চলেছে, এবং পিআইটিকে সেই বহু টিকের জন্য গণনা করার জন্য প্রোগ্রাম করে ভবিষ্যতে টিক বাধা দেওয়ার আগে iss এটি জানে যে এটির পরে 1 টিকের পরিবর্তে পরবর্তী টিক বাধাতে এন টিক্সের উত্তরণ রেকর্ড করতে হবে।
অ্যাপ্লিকেশন সফ্টওয়্যারটিতে কার্নেলের বর্তমান সময় পরিবর্তন করার ক্ষমতা রয়েছে। এটি মানটি পদক্ষেপ করতে পারে বা এটি মানটিকে হ্রাস করতে পারে। স্লুইংয়ের মধ্যে টিকের সংখ্যাটি সামঞ্জস্য করা থাকে যা সেকেন্ডের কাউন্টারকে বাড়িয়ে দিতে হয়। সেকেন্ড সুতরাং পাল্টা অগত্যা দ্বিতীয় এসআই প্রতি এক হারে গণনা করা হয় না যাহাই হউক না কেন , এমনকি নিখুঁত অসিলেটর অভিমানী। পদক্ষেপে সেকেন্ডের কাউন্টারে কেবল একটি নতুন সংখ্যা লেখা থাকে, যা সাধারণত দ্বিতীয় এসআই সেকেন্ড না হওয়া পর্যন্ত শেষ দ্বিতীয়টি শেষ হওয়ার পরে ঘটে না।
আধুনিক কার্নেলগুলি কেবল সেকেন্ড গণনা করে না ন্যানোসেকেন্ডগুলিও গণনা করে। তবে এটি একবারে প্রতি ন্যানোসেকেন্ডের টিক বাধা দেওয়া হাস্যকর এবং প্রায়শই সম্পূর্ণ অসম্ভব un এখানেই চক্র কাউন্টারের মতো জিনিসগুলি কার্যকর হয়। কার্নেল প্রতিটি সেকেন্ডে (বা প্রতিটি টিকে) চক্রের পাল্টা মানটি স্মরণ করে এবং কাউন্টারটির বর্তমান মান থেকে যখন ন্যানোসেকেন্ডে সময় জানতে চায়, শেষ সেকেন্ডের পরে কত ন্যানোসেকেন্ডগুলি বিস্তৃত হয়েছে অবশ্যই (বা টিক্)। আবার, যদিও, নির্দেশ এবং চক্রের ফ্রিকোয়েন্সি পরিবর্তন হতে পারে বলে বিদ্যুৎ এবং তাপীয় ব্যবস্থাপনার এটির সাথে সর্বনাশ হয় so
সি ভাষা এবং পসিক্স
সি ল্যাঙ্গুয়েজ স্ট্যান্ডার্ড গ্রন্থাগার একটি অস্বচ্ছ ধরন, পদ সময় বর্ণনা time_t
, একটি কাঠামো টাইপ tm
বিভিন্ন নির্দিষ্ট ক্ষেত্র সঙ্গে, এবং মত বিভিন্ন লাইব্রেরি ফাংশন time()
, mktime()
এবং localtime()
।
সংক্ষেপে: সি ভাষা নিজেই কেবল গ্যারান্টি দেয় যা time_t
উপলব্ধ সংখ্যার ডেটা ধরণের এক এবং সময়ের পার্থক্য গণনা করার একমাত্র নির্ভরযোগ্য উপায় হ'ল difftime()
ফাংশন। এটি পসিক্স স্ট্যান্ডার্ড যা কঠোর গ্যারান্টি সরবরাহ করে যা time_t
বাস্তবে একটি পূর্ণসংখ্যার প্রকার এবং এটি যুগের পর থেকে কয়েক সেকেন্ডের মধ্যে গণনা করে । এটি পসিক্স স্ট্যান্ডার্ডও যা timespec
কাঠামোর ধরণ নির্দিষ্ট করে ।
time()
ফাংশন কখনও কখনও একটি সিস্টেম কল হিসাবে বর্ণনা করা হয়েছে। আসলে, আজকাল এটি অনেক সিস্টেমে অন্তর্নিহিত সিস্টেম কল ছিল না hasn't ফ্রিবিএসডি-তে, উদাহরণস্বরূপ, অন্তর্নিহিত সিস্টেম কলটি রয়েছে clock_gettime()
, যার বিভিন্ন "ঘড়ি" উপলব্ধ রয়েছে যা সেকেন্ড বা সেকেন্ডে ন্যানো সেকেন্ডে বিভিন্ন উপায়ে পরিমাপ করে। এটি সিস্টেম কল যার মাধ্যমে অ্যাপ্লিকেশন সফ্টওয়্যার কার্নেল থেকে ইউনিক্স সময় পড়বে reads (একটি ম্যাচিং clock_settime()
সিস্টেম কল তাদের এটিকে পদক্ষেপ করতে দেয় এবং একটি adjtime()
সিস্টেম কল তাদের এটিকে মারতে দেয়))
অনেকে POSIX স্ট্যান্ডার্ডকে এটি নির্ধারিত সম্পর্কে খুব সুনির্দিষ্ট এবং সঠিক দাবি দিয়ে তরঙ্গ করে। এই জাতীয় লোকেরা প্রায়শই না হয়, আসলে পসিক্স স্ট্যান্ডার্ডটি পড়ে না । এর যৌক্তিকতাটি যেমন নির্ধারিত হয়েছে, "যুগের পর থেকে কয়েক সেকেন্ড" গণনা করার ধারণাটি, যা এই স্ট্যান্ডার্ডটি ব্যবহার করে সেটি ইচ্ছাকৃতভাবে নির্দিষ্ট করে না যে পসিক্স সেকেন্ডে এসআই সেকেন্ডের সমান দৈর্ঘ্য, বা এর ফলাফলটি gmtime()
"অগত্যা" ইউটিসি, উপস্থিতি সত্ত্বেও "। পসিক্স মানটি ইচ্ছাকৃতএতটা আলগা যাতে এটি কোনও ইউনিক্স সিস্টেমের জন্য (বলতে) অনুমতি দেয় যেখানে প্রশাসক যান এবং তাদের হওয়ার পরে সপ্তাহে ঘড়িটি পুনরায় সেট করে ম্যানুয়ালি লিপ সেকেন্ড অ্যাডজাস্টমেন্ট ঠিক করে দেয়। প্রকৃতপক্ষে, যুক্তিটি উল্লেখ করেছে যে এটি এমন সিস্টেমগুলিতে উপযুক্তভাবে ঘনিয়ে আসার জন্য যথেষ্ট looseিলে রয়েছে যেখানে ঘড়িটি বর্তমান ইউটিসির সময় ব্যতীত অন্য কোনও সময়ের জন্য ইচ্ছাকৃতভাবে ভুলভাবে সেট করা হয়েছে ।
ইউটিসি এবং টিআইএ
কার্নেল থেকে প্রাপ্ত ইউনিক্স সময়ের ব্যাখ্যা অ্যাপ্লিকেশনগুলিতে চলমান লাইব্রেরি রুটিনগুলিতে। পসিএক্স কার্নেলের সময় এবং একটিতে "ভাঙ্গা সময়" এর মধ্যে একটি পরিচয় নির্দিষ্ট করে struct tm
। ড্যানিয়েল জে। বার্নস্টেইন যেমন একবার উল্লেখ করেছিলেন, গ্রেগরিয়ান ক্যালেন্ডারের লিপ ইয়ারের নিয়ম (যা স্কুলছাত্রীরা শিখেছে) জগাখিচু করে বিশৃঙ্খলাবদ্ধ করে 1997 সালের স্ট্যান্ডার্ডের সংস্করণটি এই পরিচয়টি লজ্জাজনকভাবে ভুল পেয়েছিল যাতে 2100 সাল থেকে গণনাটি ভ্রান্তিতে ছিল। "উদযাপনের চেয়ে লঙ্ঘনে আরও সম্মান করা" এমন একটি বাক্য যা সহজেই মনে আসে।
এবং প্রকৃতপক্ষে এটি হয়। বেশ কয়েকটি সিস্টেম আজকাল আর্থার ডেভিড ওলসনের লিখিত গ্রন্থাগার রুটিনের ভিত্তিতে এই ব্যাখ্যাটিকে ভিত্তি করে, যেগুলি কুখ্যাত "ওলসন টাইমজোন ডাটাবেস" -র সাথে পরামর্শ করে, সাধারণত অধীনে ডাটাবেস ফাইলগুলিতে এনকোড থাকে /usr/share/zoneinfo/
। ওলসন সিস্টেমের দুটি পদ্ধতি ছিল:
- লিপ সেকেন্ড বাদে 1970-01-01 00:00:00 ইউটিসি থেকে কার্নেলের "যুগের পরের সেকেন্ড" ইউটিসি সেকেন্ড গণনা করা হয়। এটি
posix/
ওলসন টাইমজোন ডাটাবেস ফাইলগুলির সেট ব্যবহার করে । সমস্ত দিনগুলিতে 86400 কার্নেল সেকেন্ড থাকে এবং এক মিনিটে কখনও 61 সেকেন্ড হয় না, তবে এগুলি সবসময় একটি এসআই সেকেন্ডের দৈর্ঘ্য হয় না এবং যখন লিপ সেকেন্ড ঘটে তখন কার্নেল ঘড়িটি স্লুইং বা স্টেপিংয়ের প্রয়োজন হয়।
- কার্নেলের "যুগের পর থেকে" সেকেন্ডগুলিকে 1970-01-01 00:00:10 টিআইএর পর থেকে TAI সেকেন্ড গণনা করা হয়। এটি
right/
ওলসন টাইমজোন ডাটাবেস ফাইলগুলির সেট ব্যবহার করে । কার্নেল সেকেন্ডগুলি 1 এসআই দ্বিতীয় লম্বা এবং লিপ সেকেন্ডের জন্য সামঞ্জস্য করতে কার্নেল ঘড়ির কখনই স্লুইং বা স্টেপিংয়ের প্রয়োজন হয় না, তবে ভেঙে যাওয়া সময়ের সাথে 23:59:60 এর মতো মান থাকতে পারে এবং দিনগুলি সর্বদা 86400 কার্নেল সেকেন্ড দীর্ঘ হয় না।
এম বার্নস্টেইন তার daemontools
টুলসেট সহ বেশ কয়েকটি সরঞ্জাম লিখেছিলেন যেগুলি প্রয়োজনীয় right/
কারণ তারা ১৯ time_t
1970০-০১-০১ থেকে 00:00:00 টিআইএর পর থেকে কেবলমাত্র টিএআই সেকেন্ড পেতে 10 যোগ করেছিলেন । তিনি ম্যানুয়াল পৃষ্ঠায় এটি নথিভুক্ত।
এই প্রয়োজনীয়তাটি (সম্ভবত অজ্ঞাতসারে) টুলসেটগুলি যেমন daemontools-encore
এবং runit
ফেলিক্স ভন লাইটনার দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছিল libowfat
। ব্যবহারের বার্নস্টেনmultilog
, Guentermultilog
, অথবা Pape,svlogd
একটি ওলসন সঙ্গে posix/
কনফিগারেশন, উদাহরণস্বরূপ, TAI64N টাইমস্ট্যাম্প সব পিছনে 26 সেকেন্ড (এই লেখার সময়) হতে হবে প্রকৃত TAI দ্বিতীয় 1970-01-01 00:00:10 যেহেতু গণনা TAI।
লরেন্ট বেরকোট এবং আমি এটিকে এস -6 এবং নোশায় সম্বোধন করেছিলাম, যদিও আমরা বিভিন্ন পদ্ধতি গ্রহণ করেছি। এম বারকোট tai_from_sysclock()
একটি সংকলন-সময় পতাকা উপর নির্ভর করে। জখলাবার সরঞ্জাম যে TAI64N চেহারা চুক্তি TZ
এবং TZDIR
করতে এনভায়রনমেন্ট ভেরিয়েবল অটো-সনাক্তকরণ posix/
এবং right/
যদি তারা করতে পারেন।
মজার বিষয় হল, ফ্রিবিএসডি ডকুমেন্টস time2posix()
এবং posix2time()
ফাংশন যা ওএইএস সেকেন্ডের right/
সাথে ওলসন মোডের সমতুল্য মঞ্জুরি দেয় time_t
। এগুলি আপাতদৃষ্টিতে সক্ষম নয়।
আরেকবার…
ইউএনআইএক্স সময়টি আপনার কম্পিউটারের ইউএনআইএক্স চলমান কম্পিউটারে হার্ডওয়্যারে থাকা দোলকের দ্বারা পরিমাপ করা হয়। এটি এসআই সেকেন্ড ব্যবহার করে না; এটি ইউটিসি নয় যদিও এটি এটি পর্যাপ্তরূপে সাদৃশ্যযুক্ত হতে পারে; এবং এটি ইচ্ছাকৃতভাবে আপনার ঘড়িটিকে ভুল হতে দেয়।
আরও পড়া