728x90

공부 정리 83

범용 처리기 수에 따른 컴퓨터 시스템 구조

컴퓨터 시스템을 사용된 범용 처리기의 숫자에 따라 분류하면 세 가지로 분류할 수 있다. 단일 처리기 시스템(Single-Processor Systems) 가까운 과거까지는 대부분의 시스템에서는 하나의 처리기를 채택해 이를 바탕으로 범용 명령어 집합을 수행하도록 했으며 이 때 이를 수행하는 것은 하나의 메인 CPU였다. 시스템에 특수한 목적으로 설계된 전용 처리기가 존재하는데, 이 전용 처리기는 특정한 장치 처리기 형태로 제공하거나 메인프레임 같은 시스템의 구성요소 간 데이터 전송을 수행하는 입출력 처리기 형식으로 제공될 수 있다. 이 모든 전용 처리기들이 제한된 명령어를 실행하고 사용자 프로세스를 실행하지는 않고, OS에 의해 관리되는 경우가 있다. OS는 이 상황에서 다음 태스크에 대한 정보를 보내고 ..

Computer Science/OS 2017.12.25

C#] 리스트뷰(ListView) 컬럼 클릭하여 정렬하기

리스트뷰 요소를 잘 보면 상단에 버튼처럼 클릭이 활성화된 항목들이 존재한다. 간혹 뭔가를 만들다 보면, 이들 항목을 기준으로, 즉 해당 칼럼을 기준으로 아이템들을 정렬해야 하는 경우가 생긴다. 이때 해당 리스트뷰(ListView)의 속성의 이벤트 탭에서 ColumnClick이라는 이벤트를 처리할 메서드를 지정하고 그 메서드에서 클릭된 칼럼을 분류, 그에 따른 정렬을 구현해주면 된다. 아래 그림은 DirectoryCleaner라는 말 그대로 디렉토리를 정리해주는 윈폼 프로그램으로 필자가 개인적으로 만들고 있는 프로그램 중 하나다. 특정 디렉토리에 저장된 파일들, 하위 디렉토리의 파일들까지 모두 탐색한 결과를 리스트뷰에 담아서 보여주고 있다. 이름, 경로, 최종 수정일, 용량에 대한 정보를 리스트 뷰에 저장..

C++에서 문자열을 숫자로, 숫자를 문자열로

문자열 처리, 특히 숫자를 문자열로 다루어야 하는 문제들을 접하면 C언어를 주로 했던 사람들은 바로 떠올리는 게 atoi나 itoa다. 물론, 이를 몰라서 아스키 코드를 바탕으로 한 문자열 처리를 하겠지만(필자가 그랬다.), 어쨌든 이 두 함수를 알고 있는 사람들은 C++에서도 cstdlib.h 헤더 파일을 추가해주면 사용이 가능하다. 문자열을 숫자로 변환시켜주는 atoi는 표준 함수라서 크게 문제되진 않지만, 함수 자체가 가지고 있는 문제점이 있어서 더 좋은 대안이 있다면 사용에 주의를 기울여야 한다. 보통은 기본적인 수준의 문자열 처리 문제들을 푸는 상황에서는 문제가 없다. 문제는, 숫자를 문자열로 변환 시키는 itoa다. 표준이 아니라서 비표준 함수를 처리해주지 못하는 컴파일러를 만나면 컴파일 에러..

저장 장치 구조(Storage Structure)

모든 메모리는 바이트의 배열을 제공하며, 각 바이트는 주소값을 가지고 있다. 이 특정 메모리 주소에 대해서 일련의 적재(load)와 저장(store) 명령을 통해 상호작용이 일어난다. 적재 명령은 주 메모리에서 CPU 내부의 레지스터로 1 byte 혹은 1 word를 옮기고, 저장 명령은 레지스터에서 주 메모리(RAM;Random Access Memory;주로 DRAM)로 내용을 옮기는 것을 뜻한다. 명시적인 적재/저장 외에 CPU는 실행을 위해서 자동적으로 주 메모리로부터 명령을 적재하기도 한다. 폰 노이만 구조 시스템에서 실행되는 전형적인 명령-실행 사이클에서는, 먼저 메모리에서 명령을 가져와 그 명령을 명령 레지스터(Instruction Register;IR)에 저장하고 명령을 해독한다. 이 상황에..

Xamarin] Xamarin.Forms 공식 가이드 따라 시작하기

일전에 자마린에서 제공하는 공식 가이드를 따라 'Phoneword'라는 간단한 앱을 만들었는데, 전화번호를 입력 받아 통화를 거는 그 간단한 앱을 통해서 Xamarin.Android에서는 어떤 식으로 앱을 개발하는지 알아봤다. 이번에도 역시 해당 앱을 통해서 Xamarin.Forms에 대해서 경험해보도록 하자. 일단 새 프로젝트를 만들어야 한다.(Ctrl+Shift+N)새 프로젝트 생성 폼에서 'Visual C#>Cross-Platform>Cross Platform App(Xamarin.Forms or Native)'를 선택하고 솔루션 이름을 'Phoneword'로 정해주고 적합한 위치에 프로젝트 경로를 지정해준 후 프로젝트를 생성하자. 곧장 프로젝트가 생성되어 코딩하는 것이 아니라 'New Cross ..

O/S] 운영체제 정의

어떤 용어에 대한 정의라고 하면 여러모로 중요하게 여겨진다. 좁게 보면 시험에서 정의를 가지고 논하는 부분부터 시작해서 넓게 보면 그 용어가 품고 있는 의미들과 파생된 것들을 이해하는데 큰 도움이 되기 때문이다. O/S에 대해서 줄창 이야기는 하면서 운영체제라고 하면, 그저 '윈도우나 맥, 안드로이드 같은 것'쯤으로 대답하는 것이 전부인 상황에서 좀 알아두는 게 좋을 것 같아 정리한다. 컴퓨터 시스템에 대해서 조금씩 깨우치기 시작하는 사람들은 O/S가 수행하는 여러 가지 기능들이 너무 많아 어느 하나로 정리해서 설명하기가 어렵다.(필자도 애매하다.) 그도 당연한 것이 개인이 PC를 사용하는 이유도 제각각이며, 그 PC에서 구동되는 프로그램도 제각각, 온갖 다양성을 가지고 있기 때문이다. 컴퓨터 시스템을 ..

Computer Science/OS 2017.12.02

O/S] 운영체제가 해주는 일, 해야 하는 일

기본적으로 H/W, O/S, Application, User로 구성된 컴퓨터 시스템에서 운영체제는 시스템 동작 시 리소스를 적절하게 사용하도록하는 방법을 제공하는데, 그 자체로만은 유용한 기능을 수행하지 못하나 다른 프로그램과 함께 해서 유용한 기능을 활용할 수 있는 환경을 제공한다. User사용자 관점에서는 사용하는 인터페이스에 따라 달리 한다. 일반적인 PC는 사용자 하나가 시스템 전체의 리소스를 독점 사용하게 설계되어 있어, 시스템 전체의 목표는 사용자의 수행 작업의 성능을 최대화하는 것이라서 O/S는 사용의 용이성을 위해서 설계되고 성능에는 그보다 덜하게 투자한다. 다양한 H/W와 S/W 자원이 어떻게 공유되는지에 대한 자원의 이용에는 거의 신경 쓰지 않는다. 존재하지 않는 것은 아니지만 대형 컴..

Computer Science/OS 2017.12.01

C++] 예외 및 예외 처리 기본

프로그램이 실행 중 오동작이나, 결과를 달리 하게 만드는 예상하지 못한 상황 발생을 예외(Exception)라고 하며, 이를 적절히 처리해주는 것을 예외 처리(Exception Handling)라고 한다. 대부분의 학교에서 처음 프로그래밍에 입문해서 코드를 짜기 시작하면, 기능적인 부분에 집중을 하고 책을 따라가기 때문에 이 예외에 대해서 고려할 일이 거의 없어서 이쪽 분야에 관심을 두지 않는 학생들을 졸업장을 받을 때까지 신경 쓰지 않는 경우도 간혹 있다. 만약 자신이 소프트웨어 분야에 관심이 많고, 그로 인해서 자신의 경험을 쌓고자 개인적인 프로젝트를 진행하거나, 학년이 올라 텀 프로젝트를 실시해서 그럴싸한 프로그램을 완성해야 하는 상황이 오게 되면, 예상하지 못한 곳에서 발생하는 문제들을 접하고 해..

C,C++] C++코드와 C 코드의 링크, Mangling 규칙

C언어는 다른 언어들에 비해(C++, Java 등) 역사가 길어 그동안 작성된 라이브러리, 소스가 많이 존재하며 이것들이 각기 다른 분야에서 활발히 사용되고 있다. 만일 C++ 프로그램을 개발할 때 기존에 작성된 C의 라이브러리, 소스를 사용하게 될 경우가 있는데 이때 C++ 프로그램에서 C 코드를 연결해 사용하는 방법을 알고 있다면 비교적 쉽게 다룰 수 있다. 서로 다른 언어를 연결하는 것은 쉬운 일은 아니지만, C++은 C의 내용들이 남아 있는 분들이 있어 상대적으로 쉬운 편이다. 모든 컴파일러가 목적 코드(obj)를 만들 때, 소스코드의 변수, 함수, 클래스 등의 이름을 변형해 저장한다. 이를Name Mangling(일부 책에서는 이를 이름 규칙이라고 하는데 표현이 애매해 사용하지 않겠다.)이라고 ..

C++] STL(Standard Template Library)이 무엇인가?

STL(Standard Template, Library;표준 템플릿 라이브러리)은 일반적인 대학생들은 접할 일이 거의 없다. 대학의 C++ 강의에서는 가르칠 수 없는 환경일 수밖에 없는 것이, C를 첫 프로그래밍 언어로 배우면서 반복문에서, 포인터에서 멘탈이 터지면서 흥미를 날린 상태로 어거지로 C++을 배우기 때문이라고 생각한다. 대학에서 사용하는 C++ 교재에서는 기본적으로 템플릿과 STL을 부록 형식으로라도 다루기 때문에 충분히 정보를 제공하고 있지만, C++에서 OOP(Object-Oriented Programming;객체 지향 프로그래밍) 개념을 다루는 것에만 초점을 두고 강의를 진행하는 경우가 많기 때문에 쳐다볼 일도 거의 없다. 덕분에(?) 대부분의 대학생들은 템플릿과 더불어 STL이라는 용..

728x90