love5an: (Default)
[personal profile] love5an
А вот какой должна быть архитектура ОС ближайшего будущего?

Понятное дело, что все то говно, которое мы имеем сейчас, от AIX до Windows линейки NT - безнадежно устарело.

Я так думаю, что во-первых, естественно, новый тип ОС должен полностью исключать машинный код и прямое управление памятью. То есть, никакого Си, никакого C++, никакого ассемблера, никаких процессов(только треды), никакого разделения адресных пространств, и так далее. В ядре должен работать копирующий сборщик мусора, желательно(наверное даже обязательно) параллельный и желательно инкрементальный, а взаимодействие между частями кода должно быть полностью объектным. Весь код для такой системы должен компилироваться в некоторый промежуточный байт-код, который должен верифицироваться загрузчиком программ(перед трансляцией в машкоды), или некоторым AOT-компилятором(который бы помещал установленные программы в некоторое подобие дотнетовского GAC). Некоторую особо небезопасную часть такого промежуточного байткода позволялось бы использовать только в ядре.

MS делает какие-то шаги в этом направлении, вот взять ту же Singularity. Я ее посмотрел, и мне, в принципе, большая часть там имеющихся идей понравилась, но некоторые вещи не понравились совсем, например как ограничение на динамическую подгрузку и компиляцию кода и упор на статический анализ.

.NET достаточно близко подобрался к тому, чтобы на нем можно было бы делать такую систему. Он практически никак не зависит от платформы, плюс вот вышеупомянутый GAC и так далее. Но, в идеале, как мне кажется, у ОС ближайшего будущего должен быть лисповый рантайм.

Хотя, у современных лиспов есть проблема с безопасностью, и они слишком сильно завязаны на свои сишные рантаймы.
Вот например:

(defun %address-of (vec)
  (declare (type (simple-array (unsigned-byte 32) (1)) vec)
           (optimize (speed 3) (safety 0)))
  (sb-sys:int-sap (logand #xFFFFFFF8 (aref vec 0))))

(defun address-of (object)
  (%address-of (vector object)))

(defparameter *vector* (make-array 4 :element-type '(unsigned-byte 32)
                                   :initial-contents '(1 2 3 4)))

(let ((pointer (address-of *vector*)))
  (dotimes (i 4)
    (format t "~a " (sb-sys:sap-ref-32 pointer (+ 8 (* i 4))))))
;; => 1 2 3 4



Нужен какой-то новый диалект лиспа, я бы даже сказал диалект CL, который был бы безопасным и компилировался во что-то типа SBCL'ного IR2, то есть в некий такой VOPCode.

Date: 2011-04-15 03:16 am (UTC)
From: [identity profile] 13-49-ru.blogspot.com (from livejournal.com)
Чё, сразу давай новый процессор. Штатный x86 будет в роли IO-сопроцессора и запускалки старых ламповых Кризисов с Фаркраями, а в PCIe-16x стоять плата с толстой альтериной типа Стратикса 4 или 5. И вот туда-то влезет и свой опкод, и аппаратное тэгирование слов с прозрачным сборщиком мусора. А т.к. опкодов там 30-50 всего надо, то таких простых АЛУ можно вагон с тележкой сделать, десятки-сотни.

Фантазируем дальше: в материнку втыкается много таких плат, связываются они между собой специальным высокоскоростным линком. Или вообще можно внешний ящик в кучей плат организовать, а общение с io-сопроцессором - через PCIe-плату опять же.

У нас, кстати, так и сделано, только внутри FPGA не лисповые вычислители. Но ничто не мешает такое замутить, было бы желание.

Profile

love5an: (Default)
Dmitry Ignatiev

June 2020

S M T W T F S
 123456
78910 111213
14151617181920
21222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 21st, 2025 07:49 pm
Powered by Dreamwidth Studios