본문 바로가기
반응형

65

컴퓨터 구조 - ISA, CISC, RISC 명령어 집합 명령어의 기본적인 구조와 작동원리는 크게 다르지 않지만 명령어의 세세한 생김새, 명령어로 할 수 있는 연산, 주소 지정 방식 등은 CPU마다 조금씩 차이가 있다. CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합(instruction set) 또는 명령어 집합구조(ISA, Instruction Set Architecture)라고 한다. 즉 CPU마다 ISA가 다를 수 있다. 어셈블리어와 ISA ISA가 다르다는 건 CPU가 이해할 수 있는 명령어가 다르다는 뜻이고 명령어가 달라지면 어셈블리어도 달라진다. 다시 말해 같은 소스 코드로 만들어진 같은 프로그램이라 할지라도 ISA가 다르면 CPU가 이해할 수 있는 명령어도 어셈블리어도 달라진다. ISA가 같은 CPU끼리는 서로의 명령어를 이해.. 2023. 11. 29.
컴퓨터 구조 - 명령어 파이프라인, 슈퍼 스칼라, 비순차적 명령어 처리 기법 빠른 CPU를 만들려면 높은 클럭 속도에 멀티코어, 멀티스레드를 지원하는 CPU를 만드는 것도 중요하지만 CPU가 놀지 않고 시간을 알뜰하게 쓰며 작동하게 만드는 것도 중요하다. 명령어를 동시에 처리하여 CPU를 한시도 쉬지 않고 작동시키는 기법인 명령어 병렬처리기법과(ILP, Instruction-Level Parallelism)이 있다.대표적인 명령어 병렬 처리 기법에는 명령어 파이프라이닝, 슈퍼스칼라, 비순처적 명령어 처리가 있다. 1. 명령어 파이프라인(Instruction Pipeline) CPU가 명령어를 처리하는 과정을 여러 단계로 나누어 일련의 파이프라인 스테이지에서 동시에 처리하는 기법이다. 이를 통해 여러 명령어가 동시에 파이프라인의 각 스테이지를 통과하며 병렬적으로 실행된다. 01 명.. 2023. 11. 29.
Effective C# - Item11 .NET 리소스 관리에 대한 이해 .NET 개발자가 되기 위해서는 관리 환경에서 메모리와 주요 리소스들이 어떻게 관리되는지를 올바르게 이해해야 한다. 특히 메모리 관리와 가비지 컬렉션의 동장 방식을 정확이 이해해야 한다. 가비지 컬렉션(GC)과 메모리 관리 가비지 컬렉션은 관리되는 메모리(managed memory)를 관리하는 기술로, 메모리 누수, 댕글링 포인터, 초기화되지 않는 포인터 등과 같은 메모리 관리 문제를 자동으로 처리한다. .NET 프레임워크에서는 가비지 컬렉터가 주기적으로 실행되어 더 이상 사용되지 않는 객체를 찾아내고 메모리에서 제거한다 마크/콤팩트(Mark/Compact) 알고리즘 여러 객체 사이의 연관 관계를 효율적으로 파악하여 더 이상 사용하지 않는 객체를 자동으로 제거한다. 마킹(Marking) 이 알고리즘의 첫.. 2023. 11. 29.
컴퓨터 구조 - 클럭, 코어와 멀티코어, 스레드와 멀티스레드 클럭(Clock) CPU는 명령어를 실행하기 위해 명령어 사이클이라는 과정을 따른다. 명령어 사이클은 명령어를 메모리에서 가져오고, 해당 명령어를 해석하며, 실행하고, 결과를 저장하는 단계로 구성된다. 클럭은 이러한 명령어 사이클을 일관되게 제어하여 CPU의 작동을 동기화한다. 각 명령어는 클럭 주기에 따라 수행되며, 명령어의 실행이 끝나면 다음 명령어를 수행한다. 클럭 신호 클럭 신호는 일정한 주기로 변하는 신호로, CPU의 모든 동작은 클럭의 신호에 따라 동작한다. 클럭의 주기는 시스템의 성능과 전력 소모에 영향을 미치므로, 클럭 주기를 어떻게 설정하느냐가 중요다 클럭 속도 헤르츠(Hz)단위로 측정한다. 이는 1초에 클럭이 몇 번 반복되는지 나타낸다. 클럭이 똑-딱하고 1초에 한번 반복되면 CPU클럭.. 2023. 11. 24.
Effective C# - Item10 베이스 클래스가 업그레이드된 경우에만 new 한정자를 사용하라 베이스 클래스에서 virtual로 선언하지 않은 멤버를 재정의하려는 경우 new 한정자를 사용할 수 있다. 하지만 사용할 수 있다는 것은 전혀 다른 이야기이다. 왜냐하면 virutal로 선언되지 않은 메서드를 재정의하면 메서드의 동작 방식을 모호하게 만들 우려가 있기 때문이다. new한정자를 활용해도 좋은 경우는 베이스 클래스에서 이미 사용하고 있는 메서드를 재정의하여 완전히 새로운 베이스 클래스를 만들어야하는 정도이다. 이미 널리 사용되고있는 메서드가 있어서 이를 사용하는 코드를 일일이 찾아서 수정하기 어렵거나 혹은 외부 어셈블리에서 이 메서드를 사용하고 있어서 코드를 수정할 수 없는 경우라면 new한정자를 사용해볼 만하다. 코드 예시 public class BasePiggy { public void .. 2023. 11. 22.
Effective C# - Item9 박싱과 언박싱을 최소화하 박싱(Boxing) 값 타입의 객체를 타입이 정해져 있지 않은 임의의 참조 타입 내부에 포함시키는 방법이다. 이를 이용하면 참조 타입이 필요한 경우에도 값 타입을 쓸 수 있다. int intValue = 42; object boxedValue = intValue; // 박싱 언박싱(UnBoxing) 박싱되어 있는 참조 타입의 객체로부터 값 타입 객체의 복사본을 가져오는 방법이다. object boxedValue = 42; int intValue = (int)boxedValue; // 언박싱 박싱 언박싱을 수행하는 과정에서 임시 객체가 생성되기도 하는데 간혹 이로 인해 예상치 못한 버그가 발생하기도 한다. 박싱은 값타입을 참조 타입으로 변경한다. 이 과정에서 새롭게 생성된 참조 타입의 객체는 힙에 생성되며.. 2023. 11. 22.
반응형