컴퓨팅 수준 이해


9

혼란스러운 질문에 대해 죄송합니다. 포인터를 찾고 있습니다.

지금까지는 애플리케이션 계층에서 Java 및 Python으로 주로 작업 해 왔으며 운영 체제 및 하드웨어에 대한 모호한 이해가 있습니다. 저수준의 컴퓨팅에 대해 훨씬 더 이해하고 싶지만 실제로는 다소 압도적입니다. 대학에서 저는 마이크로 프로그래밍에 관한 수업을 들었습니다. 즉, 프로세서가 어떻게 ASM 코드를 구현하기 위해 배선되어 있는지에 대한 수업을 들었습니다. 지금까지 나는 항상 "낮은 수준"에 대해 더 많이 배우면 더 이상 끝나지 않을 것이라고 생각했습니다.

내가 가진 한 가지 질문은 하드웨어가 개발자로부터 거의 완전히 숨겨지는 것이 어떻게 가능합니까? 운영 체제가 하드웨어의 소프트웨어 계층이라고 말하는 것이 정확합니까? 하나의 작은 예 : 프로그래밍에서 L2 또는 L3 캐시가 무엇인지 이해해야 할 필요성을 결코 겪지 않았습니다. 일반적인 비즈니스 응용 프로그램 환경의 경우 오늘날 거의 모든 기술 스택이 있기 때문에 어셈블러와 더 낮은 수준의 컴퓨팅을 이해할 필요가 거의 없습니다. 이 낮은 수준의 요점은 더 높은 수준의 인터페이스를 제공하는 것입니다. 다른 한편으로, 나는이 전체 그래픽 컴퓨팅과 같이 하위 레벨이 얼마나 많은 영향을 미칠 수 있는지 궁금합니다.

다른 한편으로,이 이론적 인 컴퓨터 과학 브랜치는 추상 컴퓨팅 모델에서 작동합니다. 그러나 나는 복잡성 모델, 증명 검증 등의 범주에서 도움이되는 생각을 거의 얻지 못했습니다. NP라고하는 복잡성 클래스가 있으며 해결할 수 없다는 것을 알고 있습니다 내가 놓친 것은 이러한 것들에 대해 생각할 프레임 워크에 대한 참조입니다. 거의 상호 작용하지 않는 모든 종류의 다른 캠프가있는 것 같습니다.

지난 몇 주 동안 보안 문제에 대해 읽었습니다. 여하튼, 많은 다른 층들이 모입니다. 공격과 악용은 거의 항상 하위 수준에서 발생하므로이 경우 OSI 계층의 세부 사항, OS의 내부 작동 등에 대해 알아야합니다.


1
이 질문에 대한 훌륭한 답변이 있습니다 (첫 번째 질문). programmers.stackexchange.com/questions/81624/…
Puckl

공격 및 악용은 모든 수준에서 발생할 수 있습니다. 취약한 PHP 스크립트를 작성하면 하드웨어는 물론 기본 OS에 관계없이 악용 될 수 있습니다.
tdammers

1
컴퓨터 시스템의 요소 : 시몬 쇼켄 (Shimon Schocken)의 노암 니산 (Noam Nisan)의 최신 컴퓨터 구축 Schocken 씨의 이러한 접근 방식에 대한 이야기 ​​: youtube.com/watch?v=IlPj5Rg1y2w&feature=plcp
RParadox

과거에는 VGA 그래픽 루틴에 어셈블리 언어를 사용하는 것이 성능을 얻는 유일한 방법에 관한 것이었지만, 내가 무엇을하고 있는지 알지 못했다고 생각합니다! 그러나 지난 10 년 이상의 경력에서 나는 너무 낮은 것을 보지 않아도되었습니다. 그리고 저는 지금 그 수준에서 어떤 일이 일어나는지 무지합니다. 드물게 내 자신의 메모리를 할당하거나 정리해야합니다. 팀의 많은 사람들이 스택이 무엇인지 모른다고 생각합니다! 여러 가지면에서 휠을 재창조하여 그러한 수준에서 코딩하는 것은 생산적이지 않습니다. 오히려 우리는 거인의 어깨에 서 있습니다.
Gavin Howden

답변:


19

이러한 것들에 대해 생각하는 키워드는 추상화 입니다.

추상화는 시스템의 세부 사항을 고의로 무시하여 많은 서브 시스템에서 더 큰 시스템을 조립할 때 하나의 개별 구성 요소로 생각할 수 있도록하는 것을 의미합니다. 메모리 할당 레지스터 스 필링 트랜지스터 런타임 의 세부 사항을 고려하면서 최신 응용 프로그램을 작성하는 것은 상상할 수 없을 정도로 강력 합니다. 그러나 이상적인 방식으로 가능할 수는 있지만 비교할 수 없을 정도로 쉽지는 않습니다.그들에 대해 생각하고 대신 높은 수준의 작업을 사용하십시오. 최신 컴퓨팅 패러다임은 솔리드 스테이트 전자, 마이크로 프로그래밍, 기계 명령어, 고급 프로그래밍 언어, OS 및 웹 프로그래밍 API, 사용자 프로그래밍 가능 프레임 워크 및 응용 프로그램 등 여러 수준의 추상화에 결정적으로 의존합니다. 오늘날 전체 시스템을 이해할 수있는 사람은 거의 없으며, 우리가 그 상태로 돌아갈 수있는 길도 없습니다.

추상화의 반대 측면은 전력 손실입니다. 세부 사항에 대한 결정을 하위 수준으로 내림으로써, 하위 수준에는 '큰 그림'이없고 현지 지식에 의해서만 작업을 최적화 할 수 있고 (잠재적) 인간으로서의 지능. (보통. 요컨대, 프로세서 코드로 HLL을 컴파일하는 것은 오늘날 프로세서 아키텍처가 너무 복잡해지기 때문에 가장 지식이 많은 사람보다 기계에 의해 더 잘 수행됩니다 .)

추상화의 결함과 누수는 종종 시스템의 무결성을 위반하기 위해 악용 될 수 있기 때문에 보안 문제는 흥미로운 문제입니다. API가 메소드 A, B 및 C를 호출 할 수 있다고 가정 할 때 조건 X가 보유하는 경우에만 조건을 잊어 버리고 조건을 위반할 때 발생하는 폴 아웃에 대비할 수 없습니다. 예를 들어, 클래식 버퍼 오버플로는 메모리 셀에 쓰면이 특정 메모리 블록을 직접 할당하지 않는 한 정의되지 않은 동작을 생성한다는 사실을 이용합니다. API는 무언가를 보장합니다 .결과적으로 발생하지만 실제로 결과는 다음 단계에서 시스템의 세부 사항에 의해 정의됩니다-우리는 의도적으로 잊어 버렸습니다! 조건을 충족하는 한, 이것은 중요하지 않지만, 그렇지 않은 경우 두 수준을 모두 잘 이해하는 공격자는 일반적으로 전체 시스템의 동작을 원하는대로 지시하여 나쁜 일이 발생할 수 있습니다.

메모리 할당 버그의 경우는 큰 시스템에서 단일 오류없이 메모리를 수동으로 관리하기가 실제로 어렵 기 때문에 특히 나쁩니다. 이것은 실패한 추상화 사례로 볼 수 있습니다 .C로 필요한 모든 것을 할 수는 있지만mallocAPI는 단순히 남용하기 쉽습니다. 프로그래밍 커뮤니티의 일부는 이제 이것이 시스템에 레벨 경계를 도입하는 대신 잘못된 위치라고 생각하고 대신 자동 메모리 관리 및 가비지 콜렉션을 통해 언어를 승격시킵니다. . 사실, 오늘날에도 C ++을 여전히 사용하는 주된 이유는 정확히 어떤 리소스를 언제 언제 가져 와서 해제 할 것인지를 제어 할 수 있기 때문입니다. 이런 식으로 오늘날 관리되는 언어와 관리되지 않는 언어 사이의 주요 체계는 추상화 계층을 정확하게 정의 할 위치에 대한 의견 불일치로 간주 될 수 있습니다.

컴퓨팅의 다른 주요 대안 패러다임에서도 마찬가지입니다. 오늘날의 복잡한 요구 사항에 따라 솔루션을 처음부터 엔지니어링 할 수 없기 때문에이 문제는 실제로 대규모 시스템을 구축해야 할 때마다 항상 발생합니다. (요즘 AI의 일반적인 관점은 인간의 뇌가 실제로 있다는 것입니다 않는 그런 일을 - 피드백 루프, 대규모 상호 연결 네트워크 등 대신 간단한와 별도의 모듈 및 레이어, 그들 사이에 추상화 된 인터페이스를 통해 발생하는 행동이 우리 이유가 있음 우리 자신의 지능을 시뮬레이션하는 데 거의 성공하지 못했습니다.)


1
감사합니다 따라서 가비지 수집 / 메모리 관리의 예는 아마도이 상호 작용의 가장 잘 알려진 예일 것입니다. Neil Gershenfeld는 흥미로운 내용을 썼습니다.
RParadox

... 복잡성에 대한 아주 좋은 지적. 기계 만 기계를 설계 할 수 있다면 어디로 연결됩니까? 인공 지능 사람들이 더 지능적인 인공 지능을 만드는 인공 지능에 대해 이야기한다면, 우리는 거의 다 왔습니다. ;)
RParadox
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.