컴퓨터 프로그래밍 공부/컴퓨터 구조 + 운영체제 19

Windows Internals vol.1 - 프로세스 정리

.NET 프레임워크는 다음과 같은 두 개의 주요 컴포넌트로 이뤄져 있다.- 공통 언어 런타임(Common Language Runtime) 이것은 .NET을 위한 런타임 엔진이며, 공통 중간 언어(Common Intermediate Language) 명령을하부의 하드웨어 CPU 머신 언어와 가비지 컬렉터, 유형 검사, 코드 접근 보안 등의 명령으로 변환하는 JIT(just-in-time)컴파일러를 포함한다.CLR은 COM 인프로세스 서버(DLL)로 구현돼 있으며, 윈도우 API가 제공하는 다양한 기능을 사용한다.- .NET 프레임워크 클래스 라이브러리(Framework Class Library)사용자 인터페이스 서비스와 네트워킹, 데이터베이스 접근 등과 같은 클라이언트와 서버 애플리케이션이 전형적으로 필요..

프로그램 실행과정

프로그램 실행과정프로그램의 실제 실행단계를 살펴보기 위해서,우리가 잘 아는 실행파일의 생성과정을 간략히 정리하고자 한다. 단계 1 : 전처리기에 의한 치환작업위 그림을 보면, 실행파일 생성의 가장 첫 번째 단계가전처리기에 의해서 이뤄짐을 알 수 있다.전처리기는 '#include', '#define'과 같이 '#' 으로 시작하는지시자의 지시에 따라서 소스코드를 적절히 변경하는 작업을 한다. 단계 2 : 컴파일러의 의한 번역단계 1에 의해서 변경된 소스코드는 여전히 C 언어로 구성되어 있어서우리가 눈으로 봐도 이해할 수 있는 내용이다.이제 이 소스코드는 컴파일러에 의해서 어셈블리 코드로 번역된다.어셈블리 코드가 무엇인지 대략은 알고 있을 것이다.CPU가 디자인될 때 CPU에게 일을 시키기 위한 명령어도 함께..

시스템 프로그래밍의 이해와 접근

언어와 프로그래밍 본격적으로 시스템 프로그래밍을 설명하기 전에 앞서,언뜻 보면 C언어나 C++과 같은 언어를 많이 공부한다. 물론 Java를 공부하거나 그 외 다른 언어를 공부하시는 분들 또한 많을 것이다. 이러한 것들은 컴퓨터 프로그래밍 언어인 것이지컴퓨터 시스템에서 기능을 십분 활용할 수 있는 것들은 아니다.이러한 언어를 이용해서 시스템 프로그래밍이란 것을 공부한다. 그렇게 되면,시스템 프로그래밍..? 어그거 시스템 프로그래밍만 전문적으로 하는 사람이 배워야 하는 거 아닌가?싶을 수 있는데...모든 프로그래머가 알아둬야 하는,모든 응용 프로그램에 들어가는 요소가이런 시스템 프로그래밍이다. 우리가 C언어를 공부하고 난 다음에,내가 컴퓨터 위에서 돌아가는 무언가를 작성해야겠다!라는 다짐이 생긴다면시스템 ..

Unix/Linux Architecture

KenelOS의 핵심 기능을 모아 놓은 것이다.System callOS의 기능 중 응용프로그램이 사용하도록 허락된 기능들의 집합이다.Shell사용자와 OS 사이의 인터페이스사용자의 입력을 해석하여 커널의 함수 호출Utilities응용 프로그램 예) 웹 브라우저, 파워포인트 등  Linux의 특징높은 안정성강력한 네트워크 기능GNU 소프트웨어와 함께 배포된다.오픈소스 OS이다.오픈소스이다 보니, 다양한 플랫폼에 이식이 가능하다.리눅스는레드헷, 우번투 등의 기반이 되었다.유닉스 리눅스는 CUI가 기본이다.

시스템 프로그래밍 능력을 갖춰야 하는 이유

시스템 프로그래밍을 알면 뭐가 좋을까? 더 많은 것을 할 수 있다.더 많은 것을 하면서 더 효율적이고 높은 성능을 가져갈 수 있다. 이렇게 막연하게 더 많은 것을 할 수 있다면, 이해가 안될 것이다.간단한 예시를 들어보겠다. A->B->C 를 통한 작업물 요구 요청은 비용이 많이 든다.따라서 A->C의 직접적인 요구는요구 비용도 적게든다. 요구 비용 뿐만 아니라, 직접적인 요구는더 많은 것을 요구할 수 있고,더 효율적이고 높은 성능을 가진다. 소프트웨어의 제약을 최소화시키므로,OS와 CS를 잘 알면 시스템 콜을 사용할 수 있으며,이를 통한 시스템 소프트웨어의 설계를 직접 할 수 있다면,중간 과정이 없기 때문에 더 높은 퍼포먼스를 가져갈 수 있다. 시스템 프로그래밍 능력을 갖추면 좋은 점 즉,시스템 프로그..

시스템 프로그래밍이란?

시스템 프로그래밍의 목적은,컴퓨터 소프트웨어를 만드는 것이다.어떠한 서비스를 다른 소프트웨어에게 제공하는 것이다. 즉 정리하자면,컴퓨터 시스템의 운영을 위한 응용 소프트웨어를 실행시키기 위한 플랫폼이다. 그러면 유닉스 시스템 프로그래밍은유닉스에서 제공하는 시스템 호출을 이용해서 프로그램을 작성하는 것이다.시스템 호출은 유닉스 시스템이 제공하는 서비스를 프로그램에서 이용할 수 있도록지원하는 프로그래밍 인터페이스를 의미한다. 마찬가지로 시스템이 제공하는 서비스를 이라는 키워드 붙는다. 시스템 프로그래밍을 이해하려면다음과 같은 시스템 소프트웨어, 시스템 호출과 같은 의미를 이해해야한다. 시스템이란 무엇인가?시스템에는 가장 대표적으로 컴퓨터 시스템이 있다.이외에도 조금 더 확장해서 어떠한 연산을 지원하는 장치도..

힙 메모리 영역 특징

사용자가 메모리를 관리해야하는 영역이다.이러한 메모리 관리를 생명주기 관리라고도 한다. 힙은  동적으로 메모리를 관리하는 영역이다.즉 따라서 힙은 크기가 유동적이다.  지우는 건 빠른데 할당하는 건 스택보다 느리다.힙 메모리에 할당과 해제가 잦으면 메모리 단편화의 문제가 발생할 수 있다.

에러 처리와 스레드의 상관 관계와 커널 개체

해당 환경은 WINDOWS 환경이며, C/C++에 대해서만 다룬다. 에러 처리와 스레드의 상관 관계 에러처리를 잘 하기 위해서는 일단 윈도우가 제공하는 수많은 기능 중 하나인,윈도우 함수가 에러를 어떻게 처리하는지에 대해 먼저 이해해야 한다. 윈도우 함수를 호출하면 호출된 함수는 먼저 전달된 인자의 유효성을 확인하고함수의 기능을 수행하려 한다. 만일 전달된 인자가 유효하지 않거나 다른 이류로 인해 해당 기능을수행할 수 없으면 함수는 실패를 반환한다. 윈도우 함수가 실패하면 왜 함수가 실패했는지의 여부를 알아내는 과정이 반드시 필요하다.마이크로 소프트는 발생할 가능성이 있는 모든 에러 코드를 32비트 숫자로 정의해 두었다. 윈도우 함수가 실패하게 되면 내부적으로함수를 호출한 스레드의 스레드 지역 저장소에 ..

파일 시스템

파일 시스템파일 시스템은 보조기억장치에 있는 파일과 디렉터리가 어떻게 할당하고 접근되는지에 관한 것이다. 파일 시스템은 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고접근할 수 있게 하는 운영체제 내부 프로그램이다.이러한 파일 시스템에는 다양한 종류가 있고,하나의 컴퓨터에서 여러 파일 시스템을 사용할 수 있다. 해당 게시글에서는파일 시스템이 파일과 디렉터리를 보조기억장치에 어떻게 할당하고 접근하는지 알아보자.이러한 이론을 기반으로 만들어진 대표적인 파일 시스템인FAT 파일 시스템과 유닉스 파일 시스템이 있다. 파티셔닝과 포매팅 이제 막 공장에서 생산되어 한 번도 사용된 적이 없는새 하드 디스크 또는 SSD가 있다고 가정해보자.이 보조기억장치에 곧바로 파일을 생성하거나 저장할 수 없다.왜냐하면 보조기..

파일과 디렉터리

파일과 디렉터리 파일 시스템은 파일과 디렉터리를 관리한다. 해당 게시글에서는 파일 시스템의 개념을 잡기 이전에, 파일과 디렉터리가 무엇인지 알아보고자 한다. 파일 일상적으로 컴퓨터를 이용할 때는 파일 단위로 이용한다. 파일이란 하드 디스크의 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합을 의미한다. 달리 표현하자면 파일은 의미 있고 관련 있는 정보를 모은 논리적 단위를 의미한다. 그렇다면 파일을 이루는 정보는 어떤 것들이 있을까? 모든 파일에는 이름과 파일을 실행하기 위한 정보, 그리고 파일 관련의 부가 정보가 있다. 이 부가 정보를 속성 도는 메타데이터라고 부른다. 윈도우 운영체제를 사용한다면 파일 속성을 한 번쯤 접해 본 경험이 있을 것이다. 임의의 파일에서 마우스 오른쪽 버튼을 클릭한 뒤 [..