일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DWG
- 컴퓨터의 구조
- 109. Convert Sorted List to Binary Search Tree
- Substring with Concatenation of All Words
- Decorator
- Regular Expression
- 시바견
- Class
- 43. Multiply Strings
- iterator
- LeetCode
- attribute
- data science
- Python
- 315. Count of Smaller Numbers After Self
- 30. Substring with Concatenation of All Words
- 715. Range Module
- Convert Sorted List to Binary Search Tree
- 밴픽
- 파이썬
- t1
- 프로그래머스
- shiba
- 운영체제
- Python Code
- kaggle
- Python Implementation
- concurrency
- Protocol
- Generator
- Today
- Total
목록Computer Science/Computer Knowledge (25)
Scribbling
1. 교착 상태 1.1 교착 상태 임계구역이 존재하면 프로세스 간 상호 배제가 보장되지만, 작업이 더 이상 진행되지 않는 교착 상태에 빠지는 경우가 있다. 이처럼 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태(Dead Lock)라고 한다. 교착 상태는 아사 현상과는 전혀 다르다. 아사 현상은 운영체제가 잘못된 정책을 사용하여 프로세스의 작업이 크게 지연되는 것을 의미한다. 반면 교착 상태는 여러 프로세스가 진행되는 과정에서 자연적으로 일어난다. 컴퓨터 시스템에서 교착 상태는 시스템 자원, 공유 변수(혹은 파일), 응용 프로그램 등을 함께 사용할 때 발생할 수 있다. 1.2 자원 할당 그래프 자원 할당 그래프(Resource Allocat..
1. 프로세스 간 통신 1.1 프로세스 간 통신의 개념 독립적인 프로세스끼리 서로 데이터를 주고 받는 경우 통신을 사용한다. 프로세스끼리 통신을 하는 경우 누가 먼저 작업할지, 작업이 언제 끝날지 등을 서로 알려주어야 하는데 이를 동기화라고 한다. - 프로세스 내부 데이터 통신: 하나의 프로세스 내의 2개 이상의 스레드가 통신하는 방식. - 프로세스 간 데이터 통신: 여러 프로세스끼리 통신하는 경우. - 네트워크를 이용한 데이터 통신: 여러 컴퓨터가 네트워크로 연결되어 있을 때 프로세스의 소켓을 이용한 통신 방식. 1.2 바쁜 대기와 동기화 전역 변수를 사용하여 통신하는 경우의 가장 큰 문제는 언제 데이터를 보낼지 데이터를 받는 쪽에서 모른다는 것이다. 데이터를 받는 측에서는 반복적으로 전역 변수의 값을..
1. 스케줄링 CPU 스케줄링은 CPU에 어떤 작업을 배정할지 결정하는 것이다. 컴퓨터 시스템의 효율은 이에 따라 달라진다. 앞서 배운 것 처럼, 프로세스는 생성 상태, 준비 상태, 실행 상태, 대기 상태 등의 여러 상태를 거치며 작업이 이루어진다. CPU 스케줄러는 프로세스가 생성된 후부터 종료될 때까지 모든 상태 변화를 조정한다. - 고수준 스케줄링: 고수준 스케줄링(high level scheduling)은 작업 스케줄링(job scheduling)이라고도 불리우며, 시스템 내의 전체 작업 수를 조절하는 것을 의미한다. - 저수준 스케줄링: 저수준 스케줄링(low level scheduling) 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정하는 일이다. - 중간 ..
1. 프로세스의 개요 1.1 프로세스 프로세스는 하나의 작업 단위이다. 프로그램은 하드디스크 같은 저장장치에 보관되어 있다가 마우스로 더블클릭하면 실행된다. 이 때, 실행된다는 것은 정적인 상태의 프로그램이 메모리에 올라와서 동적인 상태의 프로세스가 되는 것을 의미한다. 1.2 시분할 CPU가 1개인 컴퓨터에서 여러 개의 프로세스가 동시에 실행되는 것은, CPU가 시간을 쪼개어 여러 프로세스에 적당히 배분하기 때문이다. 1.3 프로그램에서 프로세스로의 전환 프로세스는 컴퓨터 시스템의 작업 단위로 태스크(task)로도 불린다. 운영체제는 프로그램을 메인 메모리로 올린다. 그리고 프로세스에 '프로세스 제어 블록(Process Control Block)'을 준다. 즉, 프로그램이 프로세스가 되었다는 것은 운영..
1. 컴퓨터의 기본 구성 1.1 하드웨어 - 컴퓨터는 CPU, 메인메모리, 입력장치, 출력장치, 저장장치로 구성된다. - 메인보드는 CPU와 메모리 등 다양한 부품을 연결하는 커다란 판이다. 메인보드에는 버스가 복잡하게 얽혀 있으며 전력이 공급되면 버스로 연결된 부품이 작동한다. 1.2 폰노이만 구조 오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. 폰노이만 구조는 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조를 말한다. 이는 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조로, 하드웨어 변경 없이 프로그램만 교체하여 메모리에 올리는 방식이다. 폰노이만 구조의 핵심적인 특징은 '모든 프로그램은 메모리에 올라와야 실행 가능하다'는 것이다. 운영체제도 프로그램이기 때문에 메모리에 올라와..
1. 운영체제 1.1. 운영체제 운영체제 (Operating System)란? 윈도우, Mac Os, 유닉스 (Unix), 리눅스 (Linux) 등이 운영체제에 해당된다. 스마트폰에도 운영체제가 있는데, 애플의 iOS와 구글의 안드로이드가 대표적이다. CPU 성능이 낮고 메모리 크기가 작은 시스템에 내장하도록 만든 운영체제는 임베디드 시스템 (Embedded System)이라고 한다. 1.2. 운영체제의 필요성 - 운영체제가 없는 기계는 만들 당시 구현한 기능 외에 다른 기능을 추가하거나 성능을 향상 할 수 없다. 반면 운영체제가 있는 기계는 새로운 기능의 추가나 성능 변경이 가능하다. - 운영체제는 자원 관리 (Resource Management)라는 중요한 역할을 수행한다. 컴퓨터에 부착된 모든 장치..
1. 멀티태스킹: 컴퓨터가 한 번에 둘 이상의 작업을 수행하는 것. 과거에는 CPU가 하나여서 여러 작업을 동시에 수행하는 척만 했다면, 이제는 멀티코어 프로세서가 대세가 되어 컴퓨터가 실제로 한 번에 둘 이상의 일을 하고 있다. - 경합 조건과 락: 일부 연산에 대하여 근본적으로 멀티태스킹을 막아야 한다. - 프로세스: 프로세스 (Process)는 사용자 공간 (User Space)에서 실행되는 프로그램이다. 멀티코어 시스템에서는 여러 프로그램이 병렬로 실행될 수 있다. - 스레드: 스레드 (Thread)는 정적인 데이터와 힙을 공유하지만 자체적으로 스택을 갖는 프로그램의 일부분을 말한다. 한 스레드에서 다른 스레드로 실행이 넘어갈 때는 스레드 스케줄러 (Thread Scheduler)가 CPU 레지스..
1. 고수준 / 저수준 프로그래밍 - 운영체제는 사용자 프로그램이 I/O 장치의 복잡도를 상당 부분 볼 필요 없도록 가려준다. - 브라우저 같은 복잡한 사용자 프로갬은 그 프로그램 위에 만들어진 다른 애플리케이션 프로그램들이 운영체제를 다루는 복잡도를 볼 필요 없도록 가려준다. 2. 터미널 / 장치 드라이버 / 운영체제 2.1. 터미널과 장치 드라이버 터미널은 I/O 장치이며, 사용자 프로그램은 직접 I/O 장치와 통신하지 않는다. 아래 그림처럼 운영체제가 중간에서 통신을 중재한다. 장치 드라이버는 말 그대로 특정 하드웨어 장치를 제어하는 프로그램을 의미한다. 사용자 프로그램이 특정 장치 (예컨대 I/O 장치)를 제어하기 위해서는, 시스템 콜을 통해 운영체제를 통하여 장치 드라이버의 ..
1. 웹 브라우저 웹 브라우저는 가상 머신 (Virtual Machine)이다. 웹 브라우저는 복잡한 명령어 집합을 완전히 소프트웨어로 구현한 추상적 컴퓨터이다. 다시 말하자면, 웹 브라우저는 인터프리터에 속한다. 브라우저는 복잡한 애플리케이션인 동시에 소프트웨어로 구현된 프로그래밍 가능한 컴퓨터이다. 브라우저의 개발자 콘솔 (Developer Console)을 떠올릴 수 있다. 1.1. URL (Uniform Resource Locator) 브라우저는 URL을 사용하여 HTTP 프로토콜을 통해 서버에게 문서를 Request 한다. 서버는 문서를 브라우저에 보내고, 브라우저는 문서를 표시한다. 여기서 문서는 HTML / XML 등의 다양한 마크업 언어로 작성될 수 있다. URL은 아래 그림처럼 세 가지 ..
1. 어셈블리 언어 (Assembly Language) 컴퓨터는 (혹은 CPU는) 0과 1의 bit로 이루어진 기계어만을 이해할 수 있다. 사람이 기계어를 이용하여 코딩하려면, 무수히 많은 비트 조합을 다 외우고 있어야 할 것이다. 어셈블이 언어는 이러한 비트 조합을 추상화한 언어로, 보다 이해하기 쉬운 니모닉 (Mnemonics)를 통하여 명령어를 작성할 수 있도록 한다. 어셈블러 (Assembler)는 어셈블리 언어로 작성된 코드를 바탕으로 기계어 코드 (Machine Code)로 생성한다. 2. 고수준 언어 (High-Level Language) 고수준 언어는 어셈블리 언어보다 더 높은 추상화 단계에서 작동한다. 고수준 언어의 소스 코드 (Source Code)는 컴파일러 (Compiler)라는 프..