본문 바로가기

분류 전체보기

(30)
윈도우의 이해 윈도우의 구조 윈도우의 구조를 알기 위해서는 커널(Kernal)의 개념을 알아야 한다. 커널은 운영체제의 중심에 위치하며, 운영체제의 모든 작업의 시작을 커널이 제어한다. 즉, 커널은 인터럽트 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제 기본 기능을 제공하는 역할을 한다. 인터럽트(Interrupt) 인터럽트란 작동 중인 컴퓨터에 문제가 발생한 경우 CPU가 하드웨어적으로 상태를 확인하여 변화에 대응하는 기술이다. 인터럽트가 발생하면 운영체제의 제어 프로그램에 있는 인터럽트 처리 루틴이 작동하며, 인터럽트를 해결한 후에 인터럽트가 생기기 전의 상태로 복귀시킨다. 인터럽트의 종류로는 4가지가 있다. ■ 기계 검사 인터럽트 : 기계적인 문제가 발생할 경우 ..
운영체제의 개념과 기능 운영체제의 개념 운영체제란 사용자가 컴퓨터 시스템을 손쉽게 사용하도록하고, 시스템 자원(기억 장치, 프로세서, 입출력 장치, 정보, 네트워크 등)을 효율적으로 관리할 수 있도록 하는 프로그램들의 집합이다. 운영체제는 프로그램의 프로세스 생성과 메모리 접근 등의 작업들을 서로 충돌 없이 잘 생행되도록 도와주는 역할을 한다. 운영체제의 기능 일반 PC에서는 단일 사용자 운영체제 구성모델을 사용한다. 단일 사용자 운영체제 구성 모델은 사용자 명령 인터페이스(User Command Interface)를 중심으로 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자 등 네가지 서브시스템 관리자로 구성된다. 네트워크를 지원하는 운영체제의 경우에는 네트워크 관리자가 추가된다. 사용자 명령 인터페이스(User ..
Git branch branch branch는 사전적 의미로 가지이다. 이렇게 사전적 의미로 먼저 접근하면 이해하기 수월하다. Git에서의 branch는 무엇을 하는 것일까? Git으로 버전을 관리할 수 있다고 했다. 근데 이 버전을 사용하는 사람들이 여러명이 있다고 생각해보자. 그렇다면 새로운 버전을 위한 'Repository'를 만들어야 할 것이다. 너무 불편할 것이다. 그래서 Git에서는 하나의 'Repository'에서 여러 사용자를 위한 버전을 만들 수 있는 기능을 제공하는데, 이것이 branch이다. branch 학습을 위해서 버전 관리를 위한 'test.txt' 파일을 생성하겠다. 그리고 3개의 버전을 만들어 주겠다. 여기까지가 지금까지 해온 Git의 버전 관리이다. 이 때 다른 사용자를 위한 버전을 제공하려고..
클래스 외부에 멤버 함수 구현하기 클래스 내부의 멤버 함수 클래스는 객체를 정의하기 위한 문법으로 내부에 멤버 변수와 멤버 함수를 선언할 수 있다고 했다. 간단한 클래스의 경우에는 멤버 함수의 구현부가 다 들어가도 상관 없겠지만, 복잡한 클래스의 경우에는 상당한 수의 멤버 함수가 들어갈 것이고, 멤버 함수의 소스코드도 길어질 것이다. 이렇게 되면 클래스 내에 어떤 함수들이 있는지 파악하기 어려워질 것이고 결국에는 클래스 함수의 관리가 힘들어질 것이다. 클래스 외부에 멤버 함수 구현하기 앞서 스코프 연산자에 대해 설명했다. 이는 종속 관계를 표시하는 연산자로서 이를 활용하면 'C++' 클래스 문법의 멤버 함수를 내부에서 외부로 끌고 나올 수 있다. 클래스 내부에는 멤버 함수의 원형만 선언하고 나머지 구현부는 클래스 외부에 '::'을 사용해..
네임스페이스 (Namespace) 이름의 중복 문제 프로그래밍을 개인적으로 하는 경우에는 이름의 중복 문제가 발생하는 경우가 많이 없다. 왜냐하면 혼자서 이름을 짓기 때문이다. 하지만, 개인이 아닌 여러명이 프로그래밍을 하는 경우를 생각해보자. 네이밍을 단순하게 하다보면 이름의 중복 문제가 발생할 가능성이 생기게 된다. 이런 상황에서 C언어의 경우에는 변수 및 함수, 그리고 그 와 관련된 코드들을 일일이 찾아서 수정해줘야 한다. 상상만으로도 귀찮은 일이다. 네임스페이스 C++에서는 위와 같은 문제를 해결하기 위해서 이름으로 소스 코드의 변수와 함수를 그룹짓는 문법을 제공한다. 간단한 예를 들어 알아보자. //a의 작업 int data1, data2; int ShowData(){ } //b의 작업 int data1, data2; int S..
Git 버전 되돌리기 버전 되돌리기 저번 글에서 버전을 확인하는 방법을 알아보았다. 버전을 확인했으니, 이번엔 버전을 되돌리는 작업을 알아보겠다. 새로운 버전을 만드는 것만이 버전 관리가 아니다. 새로운 버전에 오류가 있을 경우에 이전 버전으로 되돌리는 작업까지도 버전 관리의 하나이다. 이번에는 그 과정을 수행하는 명령을 알아보겠다. Git에는 버전을 되돌리는 명령이 2가지가 있다. 'reset'과 'revert'이다. 두 가지가 어떻게 다른지 알아보자. RESET 여러 개의 버전을 만들어줄 파일을 하나 만들겠다. 파일 이름은 'test.txt'이다. 이 파일을 총 5개의 버전으로 만들어 보겠다. 버전마다 'version 2', 'version 3', ... 식으로 내용을 추가하겠다. 이 때, 한 가지 상황을 만들어 보겠다...
객체 파괴자 프로그램에서 마무리 작업 컴퓨터에서는 하나 이상의 프로그램들이 동시에 실행되고 있다. 컴퓨터가 제공하는 여러 자원을 사용하다가 제대로 정리하지 않고 프로그램을 종료하게 되면 해당 자원을 다른 프로그램이 사용하지 못할 수도 있다. 이와 같은 맥락으로 프로그램은 객체들에게 자원을 제공한다고 생각하면 된다. 따라서 생성 된 객체들은 사용이 끝날 때에 같은 프로그램 내에서 실행 중이거나 새롭게 생성될 객체를 위해서 정리를 해주어야 한다. 간단한 예를 들어보겠다. #include #include #include class MyString { private: char *mp_string; public: MyString() { mp_string = NULL; } void SetString(char *p_string)..
Git 버전 관리 버전 관리 앞의 글에서 버전을 만들었다. 그리고 'git log' 명령을 사용하여 버전에 대한 간단한 정보들도 확인하였다. 이제 이 버전을 관리하는 방법을 알아보겠다. 버전의 관리에서 제일 중요한 것은 바로 이전 버전과 어떻게 달라졌는지 확인하는 것이다. 가장 쉬운 방법으로 확인해보겠다. 아래의 명령어를 사용하면 된다. git log -p 명령어를 사용하면 위의 그림과 같은 결과가 나온다. 여기서 봐야할 점은 바로 빨간 네모와 그 아래 부분이다. 현재 Git Repository에는 'test.txt' 파일 하나밖에 없기 때문에 하나의 파일에 대한 정보만 나온다. 빨간 네모 안의 '---'로 시작하는 것이 'test.txt' 파일의 이전 버전에 대한 이름 정보이다. 당연히 이전 버전이 없기 때문에 위와 같..