سؤال

لاحظ أن هذا ليس حول .NET CLR أن مايكروسوفت هي الجة في الغلاف الجوي إلى تنصير مفهوم التعليمات البرمجية المدارة.معظم تعلم أن التعليمات البرمجية المدارة قد تم في جميع أنحاء لبعض الوقت و لا تتعلق علم الصواريخ.

ما أود معرفته هو لماذا مفهوم التشغيل الأمن في تطور أجهزة الكمبيوتر جاء في وقت متأخر جدا.

أعرف أن هذا هو كمن يسأل "لماذا لم أول نموذج تي فورد تأتي مع وسائد هوائية أحزمة الأمان؟".أهمية السؤال لا يزال قائما على الرغم من هذا على الرغم لأنه داخل الطبيعة البشرية لحماية againts مخاطر معروفة.E. g.أول T-فورد لم تذهب بسرعة كافية لتحفيز وسادة هوائية البحوث.لم تذهب بسرعة كافية لجعل الناس قاتلة حكمية الأخطاء في كثير من الأحيان أن ذلك سيكون دافعا حزام الأمان لأن المعيار في العديد من البلدان.

في تطور الكمبيوتر تقريبا العكس.بدأنا مع المجمع ، أي ما يعادل يقود سيارة تي فورد في 200mph مع العين التصحيح.لقد كان من دواعي سروري conversating مع بعض سائقي الشاحنات القديمة من هذا العصر, سماع هذه القصص عن اليد تجميع رمز التجميع الإنسان مصححات grillion أسطر من التعليمات البرمجية.... الخإذا كان لنا أن إجراء سيئة حقا خطأ في ج ، ونحن قد ينتهي مع شاشة زرقاء.عقود مضت ، يمكن أن ينتهي بك الأمر مع الأجهزة التالفة و الله يعلم ما.لكنه لغزا بالنسبة لي - الكثير من العقود ، و كل ما قمنا به لجعل تحطمها أقل إيلاما كانت شاشة زرقاء (آسف باستخدام MS كما ركبه على أي شيء).

انها ليست فقط في طبيعة الإنسان حماية ضد مخاطر معروفة, إنه أيضا داخل أي مبرمج الطبيعة لأتمتة و منهجه المرافق المشتركة, مثل فحص الأخطاء تشخيص الذاكرة, تسجيل أطر النسخ الاحتياطي الصيانة الخ الخ.

لماذا لم المبرمجين/يبدأ البشر لأتمتة المهام ضمان رمز تتغذى أن النظام لن تضر النظام؟.نعم ، بالطبع ، الأداء.ولكن هذا كان قبل أي بجدية اختراق الأجهزة القياسية.لماذا لم اللوحات على تصميم أبنية حافلة و معالجات إضافية لتسهيل "التعليمات البرمجية المدارة"?

هل هناك أي استعارة نموذج T المعابر لا يجري سريعة بما يكفي أن أنا في عداد المفقودين ؟

هل كانت مفيدة؟

المحلول

دعونا نفكر في ذلك من خلال المبادئ الأولى.

توفر المنصة المدارة منطقة صنبور نسبيا لتشغيل رمز البرنامج الذي يتم إنشاؤه من لغة مستوى عال إلى نموذج أكثر ملاءمة لتنفيذه بواسطة النظام الأساسي (IL Bytecodes). في هناك أيضا ميزات الأداة المساعدة مثل جمع القمامة وتحميل الوحدة النمطية.

الآن فكر في تطبيق أصلي - يوفر نظام التشغيل منطقة صنبور نسبيا (عملية) لتشغيل رمز البرنامج الذي يتم إنشاؤه من لغة عالية المستوى إلى نموذج أكثر ملاءمة يتم تنفيذها بواسطة النظام الأساسي (X86 Opcodes). في هناك أيضا ميزات الأداة المساعدة مثل إدارة الذاكرة الافتراضية وتحميل الوحدة النمطية.

لا يوجد فرق كبير، وأعتقد أن السبب في منصة مدارة في المقام الأول هو ببساطة لأنه يجعل ترميز النظام الأساسي. يجب أن تجعل التعليمات البرمجية المحمولة بين نظام التشغيل، لكن MS لم تهتم بذلك. الأمن جزء من النظام الأساسي المدار، ولكن يجب أن يكون جزءا من نظام التشغيل - على سبيل المثال. يمكن للتطبيق المدار كتابة الملفات ومشابه، تماما مثل العملية العادية. تقييد هذه ميزة أمان، إنه ليس جانبا من نظام أساسي مدار غير موجود على الأم.

في نهاية المطاف، كان بإمكانهم وضع جميع الميزات المدارة في مجموعة من DLLs الأصلية وألغت فكرة البايت الوسيط، جيت تجميعها إلى الرمز الأصلي بدلا من ذلك. تتميز الميزات "المدارة" مثل GC بسهولة في أكوام الأصلية - راجع Bohem C ++ One للحصول على مثال.

أعتقد أن MS هل فعلت ذلك جزئيا لأنها جعلت المترجم أسهل في الكتابة، وجزئيا لأن هذه هي الطريقة التي تم فيها صنع جافا (و. رقابة جدا من جافا، إذا كانت روحية فقط)، على الرغم من أن جافا فعلت ذلك بهذه الطريقة لصنع الصليب -Platform الترميز ممكن، شيء لا يهتم MS.

لذلك، لماذا لم نحصل على التعليمات البرمجية المدارة من البداية - لأن كل الأشياء التي تذكرها بأنها جزءا من التعليمات البرمجية "المدارة"، هي رمز أصلية. المنصات المدارة التي لدينا اليوم هي ببساطة تجريد إضافي أعلى منصة مجردة بالفعل. بلغت اللغات الرفيعة المستوى المزيد من الميزات التي تضافها إليهم لحمايتك من نفسك، فإن الفائض العازلة هي شيء من الماضي، ولكن ليس هناك سبب لا يمكن تنفيذها في C عندما تم اختراع C لأول مرة. انها فقط أنها لم تكن كذلك. ربما يبدو أن هذه الميزات مفقودة، لكنني متأكد من خلال 10 سنوات، وسنطرح "لماذا لم تنفذ C # الميزة المفيدة بشكل واضح XYZ كما لدينا اليوم"

نصائح أخرى

الكود المدار المدمج بالأمان وما إلى ذلك كان موجودا لفترة طويلة.

لم تكن هناك مجالا لذلك في منصة الكمبيوتر الأصلية ولن تضاف في وقت لاحق.

قام مركز IBM الرئيسي المؤجل بمكتبات محمية ومكتبات نواة غير قابلة لتوحيد وأمن الدور القائم وما إلى ذلك. منذ 70s. بالإضافة إلى أن كل ما يديره رمز المجمع بنظام إدارة تغيير (في الوقت المناسب). (UNIVAC، Burroughs إلخ كان لديه شيء مماثل.)

كان لدى UNIX أمن لائق إلى حد ما بنيت من البداية (ولم يتغير كثيرا على مر السنين).

لذلك أعتقد أن هذا هو مشكلة مساحة Windows / الويب الخاصة بك كثيرا.

لم يكن هناك فيروسات حاملة تمر معظم المعاملات المالية في العالم عبر هذه الأنظمة في مرحلة ما، لذلك ليس كما لو أنهم هدفا جذابا.

استضافة نظام بريد IBM الداخلي أول "طروادة" على الرغم من!

في الواقع، كان التعليمات البرمجية المدارة حول وقت طويل جدا. انصح:

  • lisp
  • حديث قصير
  • الأساسية (النكهة الأصلية)

جميعها المقدمة بيئات تشبه نظام التشغيل التي تحمي استخدامها من الذاكرة ومشاكل التحكم في الموارد الأخرى. وكلها كانت إخفاقات نسبية (نجحت أساسية فقط حقا عندما تم تقديم ميزات مثل نظرة خاطفة وكزة التي سمح لك بالفوضى مع النظام الأساسي).

أجهزة الكمبيوتر ليست قوية بما فيه الكفاية وجعلها قوية بما فيه الكفاية كانت مكلفة للغاية. عندما تكون لديك موارد محدودة فقط تحت تصرفك، فإن كل دورة دورة البايت و CPU.

أول كمبيوتر اعتدت كان Sinclair ZX Spectrum. في عام 1982. كان لديه ذاكرة الوصول العشوائي أقل (16K) من حجم ملف خط Windows واحد اليوم. وكان ذلك مؤخرا نسبيا، في عصر الكمبيوتر المنزل. قبل منتصف 1970s، كانت فكرة وجود جهاز كمبيوتر في منزلك لا يمكن تصوره.

فقط للسجل، ونحن لسنا أبدا تجميع التجمع. نحن رمز لغة التجميع مجمعة يدويا. الآن أن هذا واضح ...

يزيل التشبيه الخاص بك السؤال لأن سرعة السيارة ليست متماثلة لسرعة الكمبيوتر بهذا المعنى: استلزم السرعة المتزايدة للسيارة التغييرات في السلامة التلقائية، لكنها ليست سرعة الكمبيوتر التي تدفع تحتاج إلى تغييرات في أمان الكمبيوتر، إنها الزيادة في الاتصال. من زاوية مختلفة قليلا: للسيارة، زيادة السرعة هي القيادة التكنولوجيا لزيادة السلامة. لأجهزة الكمبيوتر، زيادة السرعة هي تمكين التكنولوجيا لزيادة السلامة.

لذلك، كانت السيارات الأولى آمنة في الحوادث لأنها كانت بطيئة. كانت أجهزة الكمبيوتر الأولى آمنة لأنها لم تكن متصلة بالتواصل.

الآن، أصبحت السيارات أكثر أمانا من خلال أحزمة الأمان، وسائد هوائية، ABS، أجهزة مكافحة الاصطدام، وما إلى ذلك. تصنع أجهزة الكمبيوتر آمنة من خلال تقنيات إضافية، على الرغم من أنك لا تزال لا تستطيع التغلب على تفصيل كابل الشبكة.

هذا مبسط، لكنني أعتقد أنه يحصل في قلب ذلك. لم نحتاج إلى هذه الأشياء مرة أخرى، لأن أجهزة الكمبيوتر لم تكن متصلة بالشبكة.

نفس السبب وراء عدم وجود قطارات منذ 300 عام. نفس السبب وراء عدم وجود هواتف محمولة قبل 30 عاما. السبب في نفس السبب الذي لا يزال أمامنا آلة نقل البطولة.

تتطور التكنولوجيا بمرور الوقت، وتسمى التطور.

لم تكن أجهزة الكمبيوتر قوية بما يكفي في ذلك الوقت. يؤدي تشغيل جامع القمامة في الخلفية إلى قتل أداء التطبيق.

التحدث إلى سؤالك عن سبب عدم امتلاك أجهزة الكمبيوتر آليات الحماية على مستوى التعليمات البرمجية المدارة، بدلا من السبب في أن VMS لم تستطع تشغيل الأجهزة البطيئة (موضحة بالفعل في الوظائف الأخرى). الجواب القصير هو أنه كان. تم تصميم وحدة المعالجة المركزية لرمي استثناء عندما حدث رمز سيء حتى لا يضر بالنظام. يتعامل مع Windows بشكل سيء للغاية، ولكن هناك oss الأخرى هناك. يمر UNIX كإشارات بحيث يتم إنهاء البرامج دون إيقاف النظام. حقا ما إذا كنت تقوم بتشغيل التعليمات البرمجية المدارة أم لا، سيؤدي استثناء مؤشر NULL إلى نفس الطريق - في إنهاء البرنامج. يضمن الذاكرة الافتراضية أن البرامج لا تعبث برمز آخر، لذلك كل ما يمكنهم فعله يضر أنفسهم.

الذي يقودني إلى النقطة الثانية. كل هذا غير ضروري إذا كنت تعرف ما تفعله. إذا كنت أرغب في الحفاظ على نظافة أثاثي، فأنا ببساطة لا أسقط الطعام عليه. لا أحتاج إلى تغطية منزلي بالبلاستيك، فقط يجب أن أكون حذرا. إذا كنت مهردي قذرة، فإن أفضل VM في العالم لن ينقذك، فسيحصل عليك فقط تشغيل الرمز القذري دون أي ضجيج. أيضا، رمز Porting سهل إذا كنت تستخدم التغليف المناسب. عندما تكون الرصم الجيد، لا يساعد التعليمات البرمجية المدارة على نطاق واسع. هذا هو السبب في عدم استخدام الجميع. إنها ببساطة مسألة تفضيل، ليست أفضل / أسوأ.

بقدر ما يذهب أمن وقت التشغيل، لا يوجد شيء يمكن لمجموعة الترجمة من برامج التشغيل أن يتوقع رمز الجهاز، ولا يوجد شيء مترجم رمز مدار يمكنه التعامل مع أن نظام التشغيل لا يمكن (أو لا) بالفعل. ألغت اللوحات الأم مع الحافلات الإضافية، وحدات المعالجة المركزية ومجموعات التعليمات أكثر بكثير من المال - فهي تدور حول نسبة التكلفة / الأداء.

في عام 1970، كانت تكلفة الذاكرة حوالي 1 دولار / بت (بدون تضخم). لا يمكنك تحمل تكاليف القمامة الفاخرة مع تكاليف من هذا القبيل.

أعتقد أن معظم الأسئلة، "لماذا لم يكن لدينا X في البرمجة Y سنوات قبل" الجواب هو تخصيص السرعة / الموارد. مع الموارد المحدودة التي يحتاجون إليها لإدارتها بفعالية قدر الإمكان. كان نوع الإدارة العامة للأغراض العامة المرتبطة بمزدئة المدارة كان يستهلك من الموارد أيضا في تطبيقات الأداء الهامة في الوقت المناسب. هذا أيضا جزءا من سبب عدم وجود رمز الأداء الحرج اليوم مكتوبا في C أو FORTRAN أو المجمع.

لماذا فقط نبني الطائرات وسفن الفضاء في وقت واحد، بدلا من mucking حول الحصان والعربة وكل تلك الأشياء الشاقة؟

استخدام لغة وسيطة يتطلب أحد أمرين:

  1. وقت التشغيل التفسير ، والتي سوف يكون كبيرا الأداء جزاء (على نطاق واسع متغير--أحيانا 2x أو أقل ، ولكن في بعض الأحيان 100x أو أكثر)
  2. فقط في الوقت مترجم, والتي سوف تتطلب المزيد من ذاكرة الوصول العشوائي, و التي سوف تضيف تأخير يتناسب تقريبا مع البرنامج الحجم بدلا من عدد من البيانات تنفيذها

الشيء الوحيد الذي لم يتغير على مر السنين هو أن العديد من برامج تشغيل معظم بشدة-الأجزاء المستخدمة من وضع عدة مرات أكثر مما كانت.لنفترض المرة الأولى أي بيان يتم تنفيذها سوف تتكبد غرامة 1000 مرة طالما اللاحقة الإعدام.ماذا سيكون تأثير هذا جزاء في البرنامج حيث كل بيان هو المدى المتوسط 100 مرة ؟ ماذا سيكون تأثير تلك العقوبة على البرنامج حيث كل بيان هو المدى المتوسط 1 ، 000 ، 000 مرات ؟

فقط في الوقت المناسب تجميع أمكن لفترة طويلة ، ولكن في عام 1980 أو 1990 ، وأداء التكلفة كانت غير مقبولة.كما تغيرت تكنولوجيا العملية تكاليف JIT تجميع ينزل إلى درجة أنهم عملية تماما.

الجواب يصبح أكثر وضوحا - لم يتم بناؤ البشر لبرامج الكتابة. يجب أن تكون الآلات تفعل ذلك والسماح لنا بالاسترخاء عن طريق لعب Pacman.

لما يستحق، قرأت بضعة أوراق من فئة لغات حسابي (واحدة عن طريق الهدنة من السيارات وآخر من قبل نيكولاس ويرث) الدعوة بالضبط هذا مرة أخرى في الستينيات والسبعينيات من بين أشياء أخرى.

لا أستطيع التحدث عن سبب حدوث هذه الأشياء بالضبط، لكن تخميني هو أنه واحد فقط من هذه الأشياء التي تبدو واضحة في فوات الأوان التي لم تكن واضحة في ذلك الوقت. ليس هذا مترجم سابق لم يكن بالقلق بشأن الأمن. من أنه كان لديهم أفكار مختلفة حول كيفية القيام بذلك.

يذكر HOARE فكرة "مترجم الخروج". بقدر ما أستطيع أن أقول، هذا هو أساسا مترجم يقوم بتحليل ثابت. له، كانت هذه تقنية شعبية فشلت (أو على الأقل لم تحل أكبر عدد ممكن من المشاكل التي كانت مختنة للحل). كان الحل له هو جعل لغات البرمجة أكثر أمانا من خلال إنشاء شفرة مدار (أو على الأقل كيف سيكون قد وضعه بشروط حديثة).

كنت أتخيل أنه بمجرد ج (وأحدث C ++)، تم القبض على فكرة التعليمات البرمجية المدارة بشكل أساسي. الأمر ليس أن C كان لغة سيئة، فقط أنه كان من المقصود أن تكون لغة تجميع بدلا من لغة برمجة التطبيق.

إذا حصلت على فرصة، فقد تقرأ تلميحات على تصميم اللغة البرمجة. وبعد انها قراءة جيدة جدا إذا كنت مهتما بهذا النوع من الأشياء.

أفضل إجابة لهذا السؤال هو، IMHO، لم يكن لدى أحد فكرة عن التعليمات البرمجية المدارة في ذلك الوقت. المعرفة تطور فعلا مع مرور الوقت. بالمقارنة مع الحقول مثل الهندسة المعمارية أو الزراعة، علوم الكمبيوتر هو مجال صغير جدا. وبالتالي فإن المعرفة الجماعية حول الحقل شاب أيضا وسوف تتطور بمرور الوقت. ربما في غضون سنوات قليلة صادفنا بعض الظاهرة الجديدة وسيطرح شخص ما على نفس السؤال، "لماذا لم يفكر شخص ما في Xyz Beofore؟".

أود أن أقول إنها تغير إلى حد كبير المقاومة للمقاومة إلى جانب تصور خاطئ لعدم كفاءة مجموعة القمامة التي تأخر اعتماد GC والتقنيات ذات الصلة. بالطبع نموذج الذاكرة المقصنة في المخ في Intel 8086 لم يساعد بالضبط على تعزيز إدارة الذاكرة العاقل على جهاز الكمبيوتر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top