일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터공학과
- 문제풀이
- 코테
- OS
- 컴공
- 알고리즘
- coding
- Operating System
- 브루트포스
- c++
- Computer science
- 오퍼레이팅시스템
- 개발
- 코딩
- 백준
- 구현
- 스택
- 북리뷰
- 너비우선탐색
- 컴공과
- cs
- 오에스
- vector
- 정석학술정보관
- 자료구조
- Stack
- bfs
- DP
- 그래프
- 정석
- Today
- Total
목록Computer science (29)
Little Jay

Program vs Process Program과 Process를 섞어서 많이 혼용한다. 그러나 두 용어는 본질적인 차이가 존재한다. 먼저 Program은 Passive Entity로서 디스크에 저장된 Binary Sequence이다. .data나 .text(code)들이 이에 해당한다. 반면 Process는 Active Entity로서 메모리에 올라간 Execution Sequence이다. Program은 따라서 메모리에 load 될 때 Process가 되는 것이다. 또한 하나의 프로그램이 여러 개의 프로세스로 나누어져 Multi Process가 될 수 있다. 하나의 프로그램이 여러 번 수행되는 것이 이에 해당한다. 따라서 다시 간략하게 두 용어의 차이는 실행 가능하거나, 실행 중, 혹은 처리기에 할당..

System Calls System Calls(이하 Syscall)이라고 하는 것은 앞에서도 계속 언급해왔다. 정말 이를 간단하게 말하자면 함수의 호출이다. 그러나 그 의미를 조금 더 자세히 살펴보자면 Process가 특정한 Kernel Service를 요청하는 것이다. 이를 통해 Application Level에서 OS와 communicate할 수 있는 것이다. Sys Call의 목적은 결국 System Resource를 보호하고자 사용하는 것이다. OS 입장에서는 Kernel Level에서 동작하는 코드들은 Trusted, 즉 신뢰할 수 있는 것으로 여겨진다. 반면에 User Program의 Level의 코드들은 OS입장에서 Untrusted하다. 이를 Reliability 측면에서 본다면 User ..

Kernel 커널이라는 것은 OS의 부분으로서 항상 메모리에 상주하고 있는 것이다. 대부분이 C 코드로 적혀져 있으며, Assebly Language로 적혀져 있는 것이 많다. 또한 커널 자체는 수많은 함수들로 구성이 되어있다. 이전에 Linux 코드로 Interrupt Handling을 어떻게 처리하였는지 살펴보았는데, Process Management, Synchronization, CPU Scheduling, Memory Management, Device Management, Interrput Handling 등 컴퓨터가 동작하기 위한 주요 메커니즘을 함수로서 제공을 한다. 이러한 것들이 System Call 이라고 한다. Utility 커널을 제외한 모든 것을 의미한다. 이를 세분화 하자면 Sys..

Evolution of OS 개괄적으로 정리해보자면 1940년대 중반에서는 컴퓨터라고 하는 것은 국가적인 재산이었다. 에니악의 크기만 봐도 개인이 소유할 수 없는 국가적인 재산이었다. 하지만 이용율은 매우 낮았던 시기이다. 그렇기 때문에 점차 이용률과 Utilization을 높이는 것이 목표가 되면서 진화했다. 그러나 현대에 와서는 HW보다는 인간의 몸값이 더 비싼 수준이 되었다. 따라서 평균대기시간과 turn-around time을 줄이는 것이 목표가 되었고 인적 자원을 idle하지 않게 interactive한 시스템으로 진화해왔다. 결과적으로 HW와 OS는 서로 영향을 주면서 발전해왔다고 할 수 있다. Serial Processing 이 시대는 1940년대 중반수터 1950년대 중반까지의 시대이다. ..
Main Objective of OS Operating System의 주요 목적을 이야기 하라고 하면 세 가지의 측면을 이야기 해야한다. Convenience Efficiency Ability to Evolve OS는 사용자들로 하여금 컴퓨터를 더 쉽게 사용할 수 있고, OS는 컴퓨터 시스템의 자원(Resources)를 효과적으로 관리하며, 유연한 설계로 변화가 있어도 끊임없이 서비스를 제공할 수 있어야한다. Role of OS OS의 목적을 살펴보았으니 이제 실제 OS가 어떤 일을 하는지 알아보자. OS의 역할은 크게 두 가지로 나뉜다. 첫 번째는 중재자(Mediator)로서의 역할이다. 이는 다양한 Interface를 제공하는 동시에 프로그램을 실행, 개발, I/O 장치 접근, 파일 접근 제어, 시스..

Memory Hierarchy 메모리는 CPU의 작업공간이다. Processor가 성능을 최대한으로 내려면 Memory의 속도 역시 중요하다. Memory는 장치의 특성에 따라 피라미드 형태로 계층구조를 그릴 수 있다. 위의 그림을 보면 레지스터, SRAM, DRAM, DISK, Secondary Memory의 순으로 피라미드 형태로 나눌 수 있는 모습을 볼 수 있다. 피라미드가 점점 내려가면서 가격적인 측면과 용량적인 측면에서 이득을 많이 볼 수 있지만, 반면 속도가 점점 내려가고 이에 따른 대역폭도 내려간다. 우리는 이러한 관계를 메모리 계층구조라고 부른다. 그러나 우리는 ideal하게 빠른 속도의 High Level Memory와 Low Level Memory의 가격과 용량을 얻고 싶다. 따라서 우..

어느덧 마지막 파트에 다다랐다. Sys Level I/O를 다루기만 하면 시스템프로그래밍이라는 과목을 한번 다 돌아보게 되는 것이다. 이제는 UNIX I/O가 어떻게 작동하는지 알아보자. UNIX I/O Overview 파일은 Byte의 Sequence이다. 앞서서 배열, 구조체 등을 배울 때에도 잠깐 언급을 했었지만, 파일은 결국 Byte가 선형 배열로 놓여있는 것이다. 이를 Linear Array of Bytes라고 한다. 또한 모든 I/O Device는 파일로 편현이 된다. 예를 들어서 /dev/tty 라고 하면 터미널에 접근할 수 있게 된다. 그리고 각각의 파일은 시스템 내에서 수행하는 타입이 있다. Regular File : 임의의 데이터를 담고 있다. Directory:파일과 관련된 그룹의 I..

Status Register CPU에는 Status Register, PSW라는 아주 작은 레지스터를 지니고 있다. 이는 CPU의 current status를 저장하기 위한 레지스터이다. CPU는 이 레지스터를 통해 코드의 flow를 Control하게 된다. Status Register는 인텔 x86 아키텍쳐에서는 Condition Code를 저장한다고 한다. Condition Code는 Single Bit으로서 이를 통해 flag를 저장한다. 이 Flags들은 operation의 결과에 따라 set된다. 일반적으로 많이 알려진 Condition Code에는 CF Carry Flag ZF Zero Flag SF Sign Flag OF Overflow Flag 등이 존재한다. 앞선 포스팅에 나와있는 레지스..

Data Size 먼저 앞서서 간단하게 살펴본 Data Size를 짚고 넘어가자. b: 1Byte - Byte w: 2Byte - Word l: 4Byte - Double word q: 8Byte - Quad word assembly 코드를 읽을 때 이 suffix를 잘 파악해야 몇 바이트 단위로 끊어서 해석해야하는지 알 수 있기 때문에 이를 잘 숙지해야한다. Mov Instruction 이전 포스팅에서 간단하게 mov instruction에 대해서 언급했었는데 이를 조금 더 자세히 살펴보고자 한다. mov가 그러하듯 다른 instruction에서 suffix로 Data Size를 붙이게 되면 그 만큼의 Data를 저장할 수 있다. 하지만 또 때에 따라서는 이 Data Size를 생략하고 쓸 수 있기 때..