추상화 계층
1. 개요
추상화 계층은 컴퓨터 시스템의 복잡성을 관리하기 위해 사용되는 개념으로, 하드웨어, 펌웨어, 어셈블리 언어, 운영 체제, 프로세스 등 여러 계층으로 구성된다. 각 계층은 특정 기능을 수행하고, 상위 계층에 추상화된 인터페이스를 제공하여 시스템의 모듈성과 유연성을 높인다. 입출력(I/O) 작업은 바이트 스트림으로 추상화되어 장치 독립성을 제공하며, 그래픽스 라이브러리는 장치 종속적인 세부 사항을 숨기는 추상 인터페이스를 통해 그래픽 장치 모델을 제공한다.
| 정의 | 추상화 계층은 복잡한 기본 구현 세부 정보를 숨기고 프로그래머에게 더 높은 수준의 추상화를 제공하는 방법임. |
|---|---|
| 목적 | 시스템의 복잡성을 줄이고 모듈성을 향상시켜 개발자가 시스템의 내부 작동 방식에 대해 걱정할 필요 없이 시스템의 상위 수준 기능을 사용하여 작업할 수 있도록 함. |
| 다른 이름 | 추상화 레벨 |
| 설명 | 하위 시스템의 자세한 구현 사항을 숨기는 방법임. |
|---|
| 설명 | 소프트웨어 디자인에서 다양한 추상화 모델을 생성할 수 있음. 추상화 계층은 이러한 모델을 코드로 구현하는 것을 의미함. |
|---|
| OSI 모델 | OSI 모델은 네트워크 프로토콜 스택의 다양한 계층이 추상화 계층의 한 형태임. 각 계층은 하위 계층의 구현 세부 사항을 숨기고 상위 계층에 표준화된 인터페이스를 제공함. |
|---|---|
| 그래픽 라이브러리 | OpenGL과 같은 그래픽 라이브러리는 그래픽 하드웨어의 복잡성을 추상화하여 개발자가 하드웨어 특정 코드를 작성하지 않고도 3D 그래픽을 렌더링할 수 있도록 함. |
| 운영체제 | 운영체제는 하드웨어의 복잡성을 추상화하여 애플리케이션이 하드웨어 특정 코드를 작성하지 않고도 파일 시스템, 메모리 관리 및 네트워킹과 같은 시스템 리소스에 액세스할 수 있도록 함. |
| 가상 머신 | 가상 머신(VM)은 기본 하드웨어의 복잡성을 추상화하여 여러 운영체제가 단일 물리적 시스템에서 동시에 실행될 수 있도록 함. |
| 데이터베이스 | 데이터베이스는 데이터 스토리지 및 검색의 복잡성을 추상화하여 개발자가 하드웨어 특정 코드를 작성하지 않고도 데이터베이스에 데이터를 저장하고 검색할 수 있도록 함. |
| 복잡성 감소 | 추상화 계층은 시스템의 복잡성을 줄여 개발자가 시스템의 상위 수준 기능을 사용하여 작업하는 데 집중할 수 있도록 함. |
|---|---|
| 모듈성 향상 | 추상화 계층은 시스템의 모듈성을 향상시켜 시스템의 한 부분을 변경해도 다른 부분에 영향을 미치지 않도록 함. |
| 재사용성 향상 | 추상화 계층은 코드를 재사용하기 쉽게 만들어 여러 시스템에서 사용할 수 있도록 함. |
| 유지보수성 향상 | 추상화 계층은 시스템을 유지보수하기 쉽게 만들어 시스템의 한 부분을 변경해도 다른 부분에 영향을 미치지 않도록 함. |
| 성능 오버헤드 | 추상화 계층은 성능 오버헤드를 유발할 수 있는데, 이는 추상화 계층이 추가 코드를 실행해야 하기 때문임. |
|---|---|
| 복잡성 증가 | 추상화 계층은 시스템의 복잡성을 증가시킬 수 있는데, 이는 추상화 계층을 이해하고 유지 관리하기 어려울 수 있기 때문임. |
| 추상화 | 추상화 계층은 추상화의 한 형태임. 추상화는 복잡한 시스템의 필수적인 특징을 강조하고 다른 특징은 억제하는 과정임. |
|---|---|
| 캡슐화 | 캡슐화는 데이터와 데이터를 조작하는 코드를 함께 묶는 과정임. 추상화 계층은 캡슐화를 사용하여 시스템의 내부 작동 방식을 숨길 수 있음. |
| 모듈화 | 모듈화는 시스템을 독립적인 모듈로 나누는 과정임. 추상화 계층은 모듈화를 사용하여 시스템의 복잡성을 줄일 수 있음. |
2. 컴퓨터 구조
컴퓨터 구조에서 컴퓨터 시스템은 일반적으로 다섯 가지 수준으로 구성된다. 컴퓨터 아키텍처에서는 소프트웨어, 프로그래밍 가능한 논리, 하드웨어와 같은 여러 추상화 계층으로 구성된다.
또한, 컴퓨터 아키텍처에서 컴퓨터 시스템은 하드웨어, 펌웨어, 어셈블리 언어, 운영 체제, 프로세스와 같은 5개의 추상화 계층으로 나타낸다.
2.1. 하드웨어
컴퓨터 아키텍처에서 컴퓨터 시스템은 일반적으로 여러 추상화 계층으로 구성되는데, 그 중 하나는 하드웨어이다. 프로그래밍 가능한 논리는 종종 하드웨어의 일부로 간주되기도 한다.
2.2. 프로그래밍 가능한 논리
컴퓨터 아키텍처에서 컴퓨터 시스템은 일반적으로 소프트웨어, 프로그래밍 가능한 논리, 하드웨어와 같은 여러 추상화 계층으로 구성된다. 프로그래밍 가능한 논리는 종종 하드웨어의 일부로 간주되며, 논리적 정의는 때때로 장치의 소프트웨어나 펌웨어의 일부로 간주되기도 한다. 펌웨어는 로우 레벨 소프트웨어만 포함할 수도 있지만, 운영 체제 및 응용 프로그램을 포함한 모든 소프트웨어를 포함할 수도 있다. VHDL, 기계어, 어셈블리 언어와 같은 로우 레벨 프로그래밍 언어에서 컴파일 언어, 인터프리터, 스크립트 언어로의 구별도 가능하다.
2.3. 소프트웨어
컴퓨터 구조에서 컴퓨터 시스템은 일반적으로 소프트웨어, 프로그래밍 가능한 논리, 하드웨어를 포함한 여러 추상화 계층으로 구성된다. 프로그래밍 가능한 논리는 종종 하드웨어의 일부로 간주되며, 논리적 정의는 때때로 장치의 소프트웨어나 펌웨어의 일부로 간주되기도 한다. 펌웨어는 로우 레벨 소프트웨어뿐만 아니라, 운영 체제 및 응용 프로그램을 포함한 모든 소프트웨어를 포함할 수도 있다. 소프트웨어 계층은 더 세분될 수 있다.
2.3.1. 운영 체제
컴퓨터 아키텍처에서 컴퓨터 시스템은 일반적으로 하드웨어, 펌웨어, 어셈블리 언어, 운영 체제, 프로세스와 같은 5개의 추상화 계층으로 나타낸다. 소프트웨어 계층은 하드웨어 추상화 계층, 물리적 및 논리적 장치 드라이버, 파일 시스템과 같은 저장소, 운영 체제 커널, 미들웨어, 응용 프로그램 등으로 더 세분될 수 있다.
2.3.2. 응용 프로그램
컴퓨터 시스템에서 응용 프로그램은 소프트웨어 계층의 최상단에 위치하며, 사용자가 직접 사용하는 프로그램이다. 응용 프로그램은 하드웨어 추상화 계층, 장치 드라이버, 파일 시스템, 운영 체제 커널, 미들웨어 등을 거쳐 하드웨어와 상호작용한다.
2.3.3. 프로그래밍 언어
컴퓨터 아키텍처에서 프로그래밍 언어는 컴파일 언어, 인터프리터, 스크립트 언어와 같은 상위 레벨 프로그래밍 언어와 VHDL, 기계어, 어셈블리 언어와 같은 로우 레벨 프로그래밍 언어로 구분할 수 있다.
2.4. 펌웨어
펌웨어는 로우 레벨 소프트웨어뿐만 아니라, 운영 체제 및 응용 프로그램을 포함한 모든 소프트웨어를 포함할 수도 있다. 컴퓨터 아키텍처에서 펌웨어는 하드웨어, 어셈블리 언어, 운영 체제, 프로세스와 함께 추상화 계층을 구성한다.
3. 입출력(I/O)
유닉스 운영 체제에서 대부분의 입출력(I/O) 작업은 장치에서 읽거나 장치에 기록되는 바이트 스트림으로 간주된다. 이 바이트 스트림 모델은 파일 I/O, 소켓 I/O 및 터미널 I/O에 사용된다. 응용 프로그램 수준에서 장치에 데이터를 읽고 쓰려면, 프로그램은 장치를 여는 함수를 호출한다. 이때 장치는 터미널과 같은 실제 장치일 수도 있고, 네트워크 포트나 파일 시스템의 파일과 같은 가상 장치일 수도 있다. 장치의 물리적 특성은 운영 체제에 의해 매개되며, 이는 프로그래머가 장치에서 바이트를 읽고 쓸 수 있는 추상 인터페이스를 제공한다. 그러면 운영 체제는 바이트 스트림을 장치에 읽고 쓰는 데 필요한 실제 변환을 수행한다.
3.1. 장치 독립성
유닉스 운영 체제에서 대부분의 입출력 작업은 장치에서 읽거나 장치에 기록되는 바이트 스트림으로 간주된다. 이 바이트 스트림 모델은 파일 I/O, 소켓 I/O 및 터미널 I/O에 사용되어 장치 독립성을 제공한다. 응용 프로그램 수준에서 장치에 읽고 쓰려면 프로그램은 장치를 여는 함수를 호출한다. 이 장치는 터미널과 같은 실제 장치일 수도 있고, 네트워크 포트나 파일 시스템의 파일과 같은 가상 장치일 수도 있다. 장치의 물리적 특성은 운영 체제에 의해 매개되며, 이는 프로그래머가 장치에서 바이트를 읽고 쓸 수 있는 추상 인터페이스를 제공한다. 그러면 운영 체제는 바이트 스트림을 장치에 읽고 쓰는 데 필요한 실제 변환을 수행한다.
3.2. 추상 인터페이스
유닉스 운영 체제에서 대부분의 입출력 작업은 장치에서 읽거나 장치에 기록되는 바이트 스트림으로 간주된다. 이 바이트 스트림 모델은 파일 I/O, 소켓 I/O 및 터미널 I/O에 사용되어 장치 독립성을 제공한다. 응용 프로그램 수준에서 장치에 데이터를 읽고 쓰려면, 프로그램은 장치를 여는 함수를 호출한다. 이때 장치는 터미널과 같은 실제 장치일 수도 있고, 네트워크 포트나 파일 시스템의 파일과 같은 가상 장치일 수도 있다. 장치의 물리적 특성은 운영 체제에 의해 매개된다. 이는 프로그래머가 장치에서 바이트를 읽고 쓸 수 있는 추상 인터페이스를 제공한다. 그러면 운영 체제는 바이트 스트림을 장치에 읽고 쓰는 데 필요한 실제 변환을 수행한다.
4. 그래픽스
OpenGL과 같은 대부분의 그래픽스 라이브러리는 추상적인 그래픽 장치 모델을 인터페이스로 제공한다. 라이브러리는 프로그래머가 제공한 명령을 그래픽 요소와 객체를 그리는 데 필요한 특정 장치 명령으로 변환하는 역할을 한다. 플로터와 CRT 모니터에 대한 특정 장치 명령은 다르지만, 그래픽스 라이브러리는 원시 도형을 제공하는 추상 인터페이스를 제공하여 구현 및 장치 종속적인 세부 사항을 숨긴다.