분류 전체보기 541

저장 장치 구조(Storage Structure)

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

이제는 모바일로 즐긴다, 테라M

간만에 쓰는 게임 리뷰인 것 같다.요즘 PC 온라인 게임 시장은 배틀그라운드를 제외하면, 답이 없는 상황이고 리뷰할 게임은 모바일 게임밖에 없으며 연말 매출 파티(?)를 위해 국내외 대형 게임사들이 앞다투어 게임을 내는 상황에서 필자가 기대를 가득 품고 아이디 선점까지 하고(비록 친구 때문에 서버를 옮겼지만,) 사전 등록했던 게임 중 하나가 테라M이다. 개발사 : 블루홀 스콜(BLUEHOLE SQUALL)퍼블리싱 : 넷마블(Netmarble)게임 종류 : 모바일 RPG 솔직히 말해서 요즘 나오는 게임들과 크게 다를 건 없다. 현실적으로, 모바일 게임을 즐기는 주 연련층이나 직업층이 실시간으로 모든 것을 동작해줄 수 있는 여력이 없는 사람들이라서 디테일한 부분을 제외하고는 자동 기능이 들어가 있어야 게임을..

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

백준 알고리즘] 4948 - 베르트랑 공준(ACM-ICPC 2011)

시간 제한 : 1초메모리 제한 : 128MB 문제베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다. 예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23) n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오. 입력입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하며, 한 줄로 이루어져 있다. (n ≤ 123456) 입력의 마지막에는 0..

백준 알고리즘] 2399 - 거리의 차이

시간 제한 : 2초메모리 제한 : 128MB 문제수직선에 n개의 점이 찍혀 있다. 각각의 점의 x좌표가 주어졌을 때, n^2개의 모든 쌍에 대해서 거리의 차이를 더한 값을 구하는 프로그램을 작성하시오. 즉, 모든 i, j에 대해서 |x[i] - x[j]|의 합을 구하는 것이다. 입력첫째 줄에 n(1≤n≤10,000)이 주어진다. 다음 줄에는 x[1], x[2], x[3], …, x[n]이 주어진다. 각각은 0 이상 1,000,000,000 이하의 정수이다. 출력첫째 줄에 답을 출력한다. 소스코드 #include #include using namespace std; int main(void) { int n; long long *list, sum = 0; cin >> n; list = new long lon..

백준 알고리즘] 1159 - 농구 경기(COCI 2013/2014)

시간 제한 : 1초메모리 제한 : 128MB 문제상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다. 내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다. 국가대표팀의 감독이 된 이후에 상근이는 매우 게..

알고리즘 공부 사이트 목록

알고리즘 공부는 책으로만 해서, 실질적으로 코드를 다루어보지 못하고 대강의 개념만 알고 있는 사람들이 많은 것 같다. 그런 사람들 중 대부분이 애당초 이쪽에 흥미가 없는 사람들이겠지만, 정말 정보력이 떨어져서 흥미가 있음에도 불구하고 배운 것을 활용하지 못하는 사람들이 있을까 싶어 정리해놓은 것들을 올린다. 알고리즘 역시 기술이며, 많이 쓸수록 숙달되며 응용해서 사용할 수 있다. 또한 기술이기 때문에 타고날 수도 타고나지 않을 수도 있다. 그것을 극복하는 게 노력이겠지만... 아무튼, 필자는 개인적으로(정확히 말하자면 필자가 봤던 책에서, 주변에서의 이야기에 따르면), 알고리즘 역시 시험 공부 하듯 여러 유형의 문제를 다양하게 풀고 다루면서 실력을 늘려나가는 쪽이 맞다고 생각한다. 이를 적절히 실전에서 ..

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

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

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

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