전체 글 182

[컴퓨터과학개론] 운영체제

운영체제 컴퓨터 하드웨어와 응용프로그램(프로그래머) 혹은 컴퓨터 사용자 사이의 인터페이스를 제공하는 시스템 소프트웨어 사용자 측면에서는 하드웨어에 대한 지식이 없어도 하드웨어에 접근하고 사용할 수 있는 하드웨어 사용의 편리성을 제공함 시스템 측면(개발자 측면)에서는 제한적인 컴퓨터 자원을 효율적으로 사용하기 위한 컴퓨터 자원 관리의 효율성을 제공함 프로세서 관리자 프로세스에게 프로세서(중앙처리장치-CPU)를 할당함 프로세스를 위한 중앙처리장치의 할당과 관리를 담당하고, 이를 위해 각 프로세서의 상태를 모니터링함 프로세스에게 중앙처리장치의 할당이 필요한 경우를 찾아내고 효율적인 관리를 위해 프로세스의 실행 상태를 변화시키기도 함 주기억장치 관리자 프로세스에게 주기억장치를 할당하고 프로세스로부터 할당된 주기..

CS 2023.11.30

[컴퓨터과학개론] 알고리즘

알고리즘 개념 주어진 문제를 풀기 위한 명령어들을 단계적으로 나열한 것 입출력: 0개 이상의 외부 입력, 1개 이상의 출력 명확성: 각 명령은 모호하지 않고 단순 명확해야 함 유한성: 한정된 수의 단계를 거친 후에는 반드시 종료해야 함 유효성: 모든 명령은 컴퓨터에서 실행 가능해야 함 효율성 → 주어진 문제에 대한 결과를 생성하기 위해 모호하지 않고 간단하며 컴퓨터가 수행 가능한 일련의 유한개의 명령들을 순서적으로 구성한 것 알고리즘 생성 단계 설계 표현/기술 정확성 검증 효율성 분석 자료구조와 알고리즘의 관계 자료구조: 데이터 사이의 논리적 관계를 표현하고 조직화 하는 방법 효율적인 프로그램을 위해 자료구조와 알고리즘을 고려해야함 알고리즘 설계 문제와 그에 따른 조건 등이 매우 다양 → 일반적이고 범용..

CS 2023.11.30

[프로그래밍 언어론] 프로그래밍 언어의 구현

프로그래밍 언어 정의와 구현 프로그래밍 언어 정의 어떤 프로그램이 올바른 형태인지, 또 올바른 형태의 프로그램을 실행하였을 때 어떻게 실행되는 것이 올바른 것인지 규정하는 것 구문(syntax): 형태에 대한 규정 의미(semantics): 실행 결과에 대한 규정 프로그래밍 언어 정의 방법 구문 정의: 문맥 자유 문법, BNF, EBNF, 구문 도표 의미 정의: 기능적 의미론, 표기적 의미론, 공리적 의미론 등 실제로 의미를 정의할 때, 여러 의미론은 매우 난해하므로 대신 자연어를 사용함 프로그래밍 언어 구현 프로그래밍 언어 L로 작성된 어떤 프로그램 P_L이 주어졌을 때, P_L이 L의 구문 규칙을 따르는 올바른 프로그램인지 검사하고, 올바른 경우에 P_L을 L의 의미 규칙에 따라 실행하는 프로그램을 ..

CS 2023.11.30

[자료구조] 트리

트리의 구성 노드: 트리의 항목/트리에 저장되는 데이터의 묶음 부모노드-자식노드: 상하 계층구조가 있고 직접적으로 연결된 노드들로서 상위계층의 부모 노드와 하위계층의 자식 노드를 의미함 루트 노드: 트리의 최상위 노드(부모가 없는 노드) 서브트리: 부모 노드를 삭제하면 생기는 트리들 잎 노드: 트리의 맨 끝(바닥)에 있으면서, 자신의 서브트리를 갖지 않는 노드 진입/진출 차수 루트 노드: 진입 차수 = 0 루트를 제외한 모든 노드의 진입 차수: 1 잎 노드: 진출 차수 = 0 내부 노드와 형제 내부 노드: 루트도 아니고 잎도 아닌 노드 형제: 같은 부모를 갖는 노드들 트리의 레벨 노드의 레벨: 루트로부터 그 노드까지 이어진 선(경로)의 길이 트리의 깊이: 트리의 레벨에서 가장 큰 값에 1을 더한 것 추상..

[프로그래밍 언어론] 구문 분석

어휘 분석 프로그램 분석: 문자 → (어휘 분석) → 어휘 → (구문 분석) → 구문 어휘 분석 어휘 분석의 목적: 프로그램에 사용되는 단어를 구별해 냄 토큰: 어휘 분석을 통해 얻어지는 결과 토큰과 렉심 렉심(lexeme): 프로그램에 사용되는 단어 토큰: 렉심의 집합 예약어나 연산자 등 토큰과 렉심이 같은 경우가 많으므로 통상 렉심을 토큰이라고 부르기도 함 식별자: 변수명, 함수명 등 이름을 나타내는 토큰 예약어 프로그래밍 언어 자체에 정의되어 포함된 토큰 식별자와 구문 구조는 같지만 식별자로 쓸 수 없음(사용자 재정의 불가) 파스 트리 유도(derivation) 구문 규칙을 이용하여 주어진 프로그램을 만들어 내는 과정 유도가 가능하면 문법적 오류가 없는 유효한 프로그램임 파스 트리(parse tre..

CS 2023.11.23

[프로그래밍 언어론] 구문론과 의미론

구문론과 의미론 언어의 형식적 정의 한국어: 주어 + 목적어 + 서술어 영어: 주어 + 동사 + 목적어 프로그래밍 언어의 형식적 정의 BASIC: PRINT “출력할 내용”; 변수 C: printf(”출력할 내용”, 변수); 형식적 정의의 필요성 프로그래밍 언어의 명확한 사용체계를 알려 줌 언어 해석의 모호함을 없애 줌 작성된 프로그램의 동작 예측이 가능 프로그래밍 언어의 구조 문자: 영어 알파벳과 아라비아 숫자를 근간으로 작성 어휘(토큰): 프로그래밍 언어 문자로 구성된 단어 구문: 프로그래밍 언어로 프로그램을 작성하는 규칙 프로그래밍 언어의 의미: 작성된 프로그램을 통해 발생하는 현상 프로그래밍 언어의 형식적 정의 구문론: 프로그램의 표면적인 구조를 정의 의미론: 프로그램의 내용적인 효과를 정의 구문..

CS 2023.11.22

[프로그래밍 언어론] 프로그래밍 언어 패러다임

프로그래밍 패러다임 패러다임이란 무엇인가? 한 시대의 견해나 사고를 규정하는 양식, 규범, 체계를 통칭하는 말 토머스 쿤의 책 ‘과학혁명의 구조’에서 소개한 용어 과학 분야의 큰 발전에 따라 이전 믿음이 흔들리고 대체되는 과정을 표현함 패러다임 전환의 사례 과학: 천동설 → 지동설 경제: 저축이 미덕 → 소비가 미덕 생활: 둘만 낳아 잘 기르자 → 자녀에게 가장 좋은 선물은 동생입니다. 언어: 너무 나쁘다. → 너무 좋다 (’너무’란 말의 의미가 바뀜) 프로그래밍 패러다임의 변화 프로그램을 작성하는 전형적인 방식 프로그래밍 패러다임의 변화: 주어진 데이터에 어떤 연산을 어떤 순서로 할지 결정하는 것이 중요 → 명령형 프로그래밍 패러다임 등장 복잡한 데이터 처리를 위해 데이터 처리 방식 자체를 잘 정리하는..

CS 2023.11.22

[프로그래밍 언어론] 프로그래밍 언어의 발전 및 동작원리

프로그래밍 언어의 발전 컴퓨터 시스템과 운영체제의 발전 컴퓨터 시스템의 발전 아이디어 시대: 계산 자동화를 위한 상상 속의 기계 설계(튜링 기계) 전자식 컴퓨터 등장: 전자 신호를 통한 계산 기계(모클리와 에커트의 ENIAC) 프로그램 저장 방식의 컴퓨터: 프로그램과 처리기를 분리(EDVAC) 운영체제의 발전 일괄처리 운영체제 등장: 관리자를 대신할 프로그램 등장 시분할 운영체제: 한 컴퓨터를 여러 사람이 사용 DOS: IBM 컴퓨터, Apple 등 개인용 컴퓨터 등장(DOS) PC 환경 운영체제 발전: GUI 운영체제와 Linux의 발전 1950년대: 초기 프로그래밍 언어 Fortran: 수식과 문장, 제어문의 등장 IBM의 존 배커스에 의해 개발됨 과학계산용 언어 Algol: 구조화 프로그래밍의 발전..

CS 2023.11.22

[프로그래밍 언어론] 프로그래밍 언어 소개

프로그래밍 언어란 무엇인가? 프로그래밍 언어 정의 언어의 정의 자연어는 크게 말과 글, 두 가지 형태로 존재 언어는 의사 전달 수단 언어는 한 사람의 생각을 다른 사람에게 전달하는 데 사용됨 프로그래밍 언어의 정의 프로그래밍 언어는 프로그램 작성에 사용되는 언어 프로그래밍 언어는 의사 전달 수단 주로 사람의 생각을 기계에 전달하는 데 사용됨 프로그래밍 언어의 특징 프로그래밍 언어와 자연어의 차이 방향: 자연어는 양방향이지만 프로그래밍 언어는 단방향 형식: 자연어는 말과 글 모두 쓰지만 프로그래밍 언어는 주로 글 내용: 자연어는 풍부한 내용을 전달하지만 프로그래밍 언어는 정확한 의도를 전달 프로그래밍 언어도 양방향에 사용될 때가 있음 (예: 알고리즘) 최근 프로그래밍 언어는 시각적 언어도 채택하고 있음 (..

CS 2023.11.22

[자료구조] 연결 리스트

리스트의 개념 리스트 물품이나 사람의 이름 따위를 일정한 순서로 적어 놓은 것 어떤 정의에 의해서 결정된 논리적인 순서의 나열 리스트의 순서는 데이터가 저장되는 물리적인 위치와 상관없이 사람들의 머릿속에 인식되고 어떤 정의에 의해서 결정된 논리적인 순서, 혹은 리스트에 나타나는 원소들 간의 의미적인 순서를 의미함 배열 인덱스로 표현되는 추상적 순서가 원소의 메모리 공간(메인 메모리, DDR)의 물리적인 위치와 일치함 배열의 순서는 메모리 공간에서 저장되는 원소값의 물리적 순서 배열을 이용한 리스트의 구현 배열의 확장 초기 배열 선언에서 충분히 크게 하면 어느 정도는 배열의 추가 확장을 피할 수 있겠지만(메모리 낭비), 원소를 리스트의 중간에 삽입하기 위해서는 리스트의 원소값을 하나씩 뒤로 밀어야 하는 상..