관리 형 OS가 좋은 생각이라고 생각하십니까? [닫은]


15

Microsoft SingularityJNode 와 같은 관리되는 OS 는 매우 흥미로운 개념입니다. 기본적으로 OS는 기본적으로 가상 머신을 구현하는 저수준 언어 (C / C ++ / Assembly)로 작성된 코드로 부트 스트랩됩니다. 나머지 OS (및 모든 userland 앱)는 가상 머신에서 실행됩니다. 이것에 대한 좋은 점이 있습니다. 예를 들어, 갑자기 임의 포인터를 쓸모 없게 만듭니다. 그리고 잘 쓰여져 있다면, 대부분의 현대 OS가 가지고있는 많은 레거시 크루 드를 제거 할 수 있습니다.

그러나 단점으로 하드웨어에서 멀리 떨어져 있으며 개발자는 더 낮은 추상화 수준으로 떨어 뜨리고 손을 더럽힐 수 없습니다.

이것에 대한 당신의 의견은 무엇입니까?


그들은 내가 사용했던 유일한 언어이기 때문에 내가 높은 수준의 언어에 편중하고있어 이후로 내가 대답 두려워
TheLQ

2
더욱 빠른 컴퓨터에서는 이것이 큰 문제라고 생각합니다. 그러나 MSFT가 구현하면 훌륭하거나 많이 빨릴 것입니다. 중간에는 없습니다.
직업

"레거시 크루 드"는 기존 응용 프로그램을 실행하는 것입니다. 실제로 사용할 것을 갖는 것의 중요성을 과소 평가하지 마십시오.

답변:


8

나는 이것이 "의존하는"또 다른 경우라고 생각한다.

초고속 성능이 반드시 문제가되지 않는 웹 브라우저, 워드 프로세서 등과 같은 응용 프로그램을 작성하는 경우이 방법이 유용합니다. 이 접근 방식을 사용하면 고객에게보다 안전하고 통제 된 경험을 제공 할 수 있습니다. 맬웨어로 인한 피해를 제한 할뿐만 아니라보다 일관된 환경에서 실행하고 있습니다.

콘솔 게임과 PC 게임의 차이점과 같습니다. 전자는 정확히 어떤 하드웨어를 사용해야하는지 알고 있으므로 그 지식을 활용할 수 있지만 후자는보다 다양한 그래픽 카드, 사운드 카드, 하드 디스크 속도 등에 대처할 수 있어야합니다.

그러나 낮은 수준의 액세스가 필요하고 여전히 "기본"으로 실행해야하는 응용 프로그램 (예 : 게임!)이 있습니다.

관리되는 언어와 마찬가지로 작업에 적합한 도구를 사용해야합니다.


3
정말 동의하지 않습니다. 게임을 기본으로 실행할 이유가 없으며 운영 체제가 필요한 모든 관리되는 진입 점을 제공하는 경우 기본적으로 낮은 수준으로 전환 할 필요가 없습니다. 물론 약간의 성능 저하 (실제로 전체 시스템을 관리하는 경우 무시할 수있는)가 있지만 오늘날에는 처리 능력이 풍부하고 의존성이 높은 소프트웨어가 많이 필요합니다.
Wizard79

@Lorenzo Games는 이미 컴퓨터에 충분한 스트레스를주기 때문에 성능 저하가 중요합니다. 그러나, 나는 VM이하는 모든 랩 기본 통화 인 경우 성능에 미치는 영향이 될 것입니다 얼마나 잘 모르겠어요
TheLQ을

4
@TheLQ : 요점은 항상 미들웨어 (DirectX, Open GL 등)가 있기 때문에 게임이 이미 "낮은 수준의 물건"을 처리 할 필요가 없다는 것입니다. 물론 그들은 계산 집약적이지만 미들웨어를 사용하는 것은 이미 성능 저하입니다. 관리되는 미들웨어 일뿐입니다.
Wizard79

3
OS가 JITting을 처리하는 경우 "네이티브"코드보다 더 빠르거나 덜 실행되는 관리 코드로 끝납니다. 프로그램을 어셈블리와 같은 방식으로 제어 해야하는 경우 항상 바이트 코드로 프로그램을 직접 사용할 수 있습니다.
Chinmay Kanchi

3
Afaik, MS Singularity는 커널 모드와 사용자 모드를 전혀 전환 할 필요가 없기 때문에 성능이 크게 향상 되었습니다. 포크도 훨씬 저렴해진다.
9000

3

일반적으로 나는 그들이 좋은 생각이라고 생각하지만, 그들 주위에 많은 것들이 없거나 완전히 구워지지 않았기 때문에 실제 세계에서 그들이 어떻게 수행되는지를 말하기는 매우 어렵습니다. MS가 Singularity 프로젝트를 업데이트하여 어디로 가고 있는지 알 수 있기를 원하지만 일부는 Windows의 일부 버전에서 작동하고 있습니다.


3

완벽하게 관리되는 OS의 이점은 엄청나고 미래 일 수 있지만 수년이 걸릴 것이라고 생각합니다.

우수한 관리 운영 체제를 사용하면 관리 여부에 관계없이 필요한 모든 저수준 작업을 수행하는 데 필요한 모든 관리 진입 점을 제공 할 수 있습니다. 인터럽트 포착 및 장치와의 I / O 수행. C #은 또한 안전하지 않은 코드 (포인터 처리)를 허용하지만 "장치 드라이버"(허용되는 또 다른 유형의 소프트웨어 격리 프로세스)에서만 허용됩니다.

안전성, 균일 성, 휴대 성 및 특히 신뢰성의 이점은 모든 성능 단점을 확실히 초과합니다. 더 이상 컨텍스트 전환을 수행 할 필요가 없기 때문에 완전히 관리되는 시스템은 놀라 울 정도로 빠릅니다.


컨텍스트 전환이 필요하지 않습니까? 여전히 여러 프로그램을 한 번에 실행해야합니다.
직업

프로그램과 코드가 모두 VM에서 실행되면 컨텍스트 전환이 없을 수 있습니다. 그러나 HL 언어로 MMU를 다시 구현해야하므로 성능상의 이점이 많지 않을 것입니다.
Maciej Piechotka

2

관리되는 OS는 아마도 마이크로 커널과 비슷할 것입니다. 안전 이름으로 성능을 희생하십시오.

두 부분으로 코드를 분할해야하는 것과 비슷한 문제가있을 수 있습니다.

  • C / 어셈블러로 작성된 저수준 커널
  • 관리 언어로 작성된 더 높은 수준의 커널

HL 언어를 안전하게 입력하고 떠나는 비용에 따라 마이크로 커널과 비슷한 문제가 발생할 수 있습니다. HL을 떠나는 것이 전체 컨텍스트 스위치보다 빠르지 만 JRC와 같은 IIRC는 비용이 많이 듭니다.

다른 플랫폼 (예 : C, Java 또는 .Net)에서 많은 앱이 작성되므로 사용자 애플리케이션에는 별도의 컨텍스트가 필요할 수 있습니다. 같은 경우에 응용 프로그램은 CPU 바운드 (컴파일러, 음악 변환기 등) 일 수 있으며 충분한 속도로 수행하려면 어셈블러 최적화가 필요합니다. 게다가 HL 언어로 구현 된 MMU 보호는 훨씬 더 미세하게 조정 되더라도 하드웨어만큼 빠르지 않을 것입니다.

또한 HL 언어는 저수준 작업에 능숙하지 않습니다. 소프트웨어는 일반적으로 "좋은"코딩 연습으로 설계되었지만 드라이버는 필요하지 않습니다. 커널은 때때로 수동 관리 메모리를 필요로하기 때문에 적어도 일부 오류로부터 보호 할 것이라고 생각하지 않습니다.

마지막으로 그러한 OS에 전체 VM이 필요하다고 생각하지 않습니다. OS는 HL 언어 (GC & co.)로 컴파일 할 때마다 한 번만 컴파일 할 수 있기 때문에 더 나은 후보가 될 수 있습니다.

예를 들어, 갑자기 임의 포인터를 쓸모 없게 만듭니다.

OS는 본질적으로 저수준입니다. '임의 포인터'뿐만 아니라 가상 주소 대신 물리적 주소로 하드웨어에 전달합니다. 일부 DMA는 처음 16MiB의 메모리 만 처리 할 수 ​​있습니다. 그러한 OS는 많이 단순화 할 수 있지만 주소를 제거하지는 않습니다.

그리고 잘 쓰여져 있다면, 대부분의 현대 OS가 가지고있는 많은 레거시 크루 드를 제거 할 수 있습니다.

  1. 많은 레거시 하드웨어가 있습니다. 소프트웨어에서 훨씬 더. 먼저 리얼 모드에서 시작한 다음 A20 게이트 (요청하지 않음)를 보호 모드로 전환 한 다음 롱 모드로 설정하십시오.
  2. API / ABI 호환성이 좋습니다. 그들이 그러한 OS를 작성했다고 가정 해보십시오. 어떻게 실행할 것입니까? Firefox-아니요 (WinAPI를 사용하는 C 및 C ++). Java-아마도 JNI를 사용하기를 원치 않는 한 ikvm을 통해 포팅되거나 사소한 문제가 있었을 것입니다. MSSQL (및 Oracle, MySQL, Postgresql ...)은 관리되는 언어로 작성되지 않았으므로 서버에 적합하지 않은 것 같습니다.
  3. 버그 호환성도 "좋은"것입니다. AFAIK MS는 일부 소프트웨어가 스마트 (잘못된 읽기) 방식으로 API를 사용하지 않는지 테스트하고 확인하는 데 많은 시간을 소비합니다. freeWindows가 실제로 메모리를 확보하기 시작한 후 포인터를 사용하는 문제와 같습니다 .

나는 그것이 마이크로 커널과 같은시기에 인기를 얻을 것이라고 생각합니다.


2

개인적으로, 관리 형 OS의 아이디어는 공산주의와 비슷하지만 이론적으로는 좋지만 구현하기에는 비실용적이라고 생각합니다.

문제는 OS를 처음부터 완전히 다시 작성하지 않고 관리되는 OS를 가져올 수있는 방법을 보지 못한다는 것입니다 (그리고 누군가 가이 부분에서 나를 잘못 증명할 수 있기를 바랍니다). 또한 수십 년 동안 관리되지 않는 코드를 관리되는 OS에 맞추려면 어떻게해야합니까?

가장 인기있는 OS의 커널은 전투 테스트를 거쳤으며 수십 년 동안 성숙했습니다. 당신은 단순히 변덕에 다시 쓰지 않습니다. 말할 것도없이 역사는 프로세서 설계와 커널 아키텍처의 사례로 가득 차 있지만, 그보다 훨씬 더 좋은 가격을 내놓을 수는 없었습니다.

마지막으로 Microsoft 또는 Apple과 같은 회사는 어떻게 관리 형 OS를 고객에게 판매합니까? 일반 컴퓨터 사용자가 OS를 관리하거나 관리하지 않더라도 관심을 가질까요?

위에서 언급했듯이, 나는 틀렸고 관리되는 OS가 현실이되기를 바랍니다. 그러나 나는 회의적입니다. 우리가 그것을 본다면 아마 앞으로 10 년이나 2 년이되지 않을 것입니다.


2
OS 커널은 수용에 그다지 중요하지 않습니다. MS는 완전히 새로운 호환되지 않는 NT 커널을 고안했으며 성공했습니다. 애플은 커널 아키텍처와 CPU 아키텍처를 크게 바꿔 놓았으며 여전히 번성하고있다. 핵심은 기존 소프트웨어와의 호환성 및 간편한 이식입니다. 이전 코드에서 새 코드로 부드럽게 전환 할 수있는 호환성 및 / 또는 가상화 계층은 관리되는 OS에서 부당하게 보이지 않습니다.
9000

2

관리 코드는 오늘날 가상 메모리 보호가 구매하는 것, 즉 컴퓨터가 리소스에 대한 액세스를 거부 할 수있는 능력을 추정 한 것입니다.

IBM은 이미 메인 프레임 시스템에서이 작업을 수행하고 있기 때문에 일반 대중이 사용할 수있는 시스템에서 발생하기 전에 시간 문제 일 뿐이라고 생각합니다.

Chrome을 실행하고 기본적으로 아무것도 실행하지 않는 Google 랩톱이 관리 코드에서 실행되는지 여부를 걱정 하시겠습니까?


1

그러나 단점으로 하드웨어에서 멀리 떨어져 있으며 개발자는 더 낮은 추상화 수준으로 떨어 뜨리고 손을 더럽힐 수 없습니다.

이것은 사실이 아닙니다. 예를 들어 JNode에는 Unsafe메모리 위치 등에 액세스 할 수 있는 클래스 (및 기타 클래스)가 있습니다. JIT 컴파일러에 의해 권한이 부여 된 명령으로 변환되는 "매직"클래스 / 메소드도 있습니다. 이러한 클래스 / 메서드에 대한 액세스는 보안 관리자, JIT 컴파일러 등에 의해 제한됩니다 (또는 제한됨). 그러나 운영 체제 레벨에서 실행되는 코드를 작성하는 경우 이러한 기능을 사용할 수 있습니다.

물론 잘못된 Unsafe클래스와 관련 클래스를 사용 하면 운영 체제 충돌이 발생하거나 트랙이 다운 될 수 있습니다.


0

데스크톱 컴퓨터에 대한 유용성이 의심됩니다. 그러나이 시점에서 시간이 나를 잘못 증명할 수 있습니다.

그러나 내 눈에 흥미로운 점 중 하나는 서버 운영 체제, 특히 가상화 환경의 게스트 운영 체제입니다. 전체 GUI를 포함하여 실행되는 불필요한 서비스 수를 알고 가상 서버 환경에 전체 Windows 서버 설치를 설치하는 것은 결코 제게 맞지 않았습니다.

이제 ASP.NET 응용 프로그램을 호스팅하기 위해 가상 서버에 Singularity와 같은 것을 설치하는 것이 더 합리적입니다. 그들이 가벼운 OS를 유지할 수 있다고 가정합니다.


1
가능하면 Windows를 완전히 버리는 것이 좋습니다.
직업

1
브라우저 및 기타 인터넷 연결 항목을 샌드 박스로 만드는 경향은 아마도 관리 형 또는 적어도 구획화 된 OS 또는 데스크톱도 바람직하다는 것을 보여줍니다.
9000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.