no image
7. Stack
OS마다 구현은 다르겠지만, 본 포스팅에서는 IA32로 stack에 대해 설명한다. IA32에서 사용하는 register는 다음과 같다. %eax 등은 data를 저장하는 데 사용된다. %esp나 %ebp는 stack의 위치를 나타낸다. %eip는 PC라고 생각하면 된다. IA32 stack Stack은 lower address로 grow한다. %ebp가 제일 큰 주소를 가지고 %esp가 감소하는 식으로 stack에 정보를 저장한다. (아래로 큰다. Heap은 위로 큰다.) Push %esp의 주소가 -4되면서 data가 저장된다. 명령어는 pushl이다 Pop %esp의 주소가 +4되면서 가장 밑에 있던 data가 pop된다. Procedure control flow 스택에는 function call과..
2023.12.08
no image
6. Threads
코어 수는 증가하는 반면, CPU의 속도는 증가하기 어렵게 되자 concurrency를 위한 수단이 필요해졌다. 많은 코어를 사용할 수 있는 어플리케이션이 필요해진 것이다. 처음에는 그 만큼 프로세스 수를 늘렸다. 쉽고, 보안성도 확실했기 때문이다. 그러나 프로세스 간의 통신은 큰 overhead이며 context switching 비용도 만만치 않다. 이런 배경에서 등장한 것이 thread이다. 프로세스와 비슷하지만, 같은 프로세스에서 나온 thread는 address space를 공유한다. 매우 큰 일을 나눠서 해결하며 shared address space를 통해 communication을 하기 때문에 비용이 적게 든다는 장점이 있다. 이와 같은 장점으로 인해 multi-threaded program..
2023.12.08
no image
5. Virtual Memory
OS의 목표 중 하나는 physical memory가 부족할 때, 프로세스가 최대한 동작하게 만드는 것이다. 가령 user의 code 영역은 프로세스마다 physical memory에 저장할 필요가 없을 것이다. Virtual memory는 physical memory가 훨씬 더 많은 것처럼 환상을 주는 OS의 핵심 스킬이다. Locality of reference 프로세스 내부에서 얼마나 연속적이거나 근처에서 참조하는지 나타내는 지표를 locality라고 한다. 크게 2가지의 locality가 있다. Spatial: 참조한 address 근처 address를 참조 Temporal: 참조한 address 다시 참조 프로세스는 code의 10%에 90%의 시간을 쓸만큼, locality를 고려해 code를..
2023.12.08
no image
4. Paging
Physical memory에 virtual memory를 할당시켜 보려는 노력을 계속했었는데, contiguous한 성질 때문에, fragmentation이라는 한계에 부딛히게 된다. 이를 해결하고자 도입한 것이 paging이다. 아이디어는 간단하다. 메모리를 fixed-sized page로 잘게 나눠버리는 것이다. (보통 4KB) Translation (VA->PA) 방법은 기존과 동일하다. Logical address에서 일정 top bit로 table에 저장되어 있는 내용을 참고해 physical frame number를 찾고, offset만큼 이동해 데이터를 참조하게 된다. 실제 동작은 다음처럼 진행된다. Page Table Mapping 정보가 저장된 table이다. 프로세스마다 1개씩 가지게..
2023.12.05
no image
3. Memory Virtualization
하나의 프로그램만 돌린다면 메모리 가상화는 필요없다. 여러 프로그램을 동시에 돌리기 위해서 우리는 메모리 가상화를 사용한다. 멀티프로그래밍의 목표는 다음과 같다. Transparency: 프로세스는 메모리가 공유되고 있다는 것을 몰라야 함, 항상 사용 가능해야 함 Protection: OS나 다른 프로세스의 메모리 침범할 수 없음 Efficiency: 메모리 낭비가 없어야 함 Sharing: 주소 공간 공유할 수 있음 Memory address space OS가 프로세스에게 private한 address space를 줘야 하는데, 한 가지 문제가 있다. 메모리 공간이 다이나믹하다는 것이다. 실제로 메모리는 다음의 구조를 가진다. Code 영역은 static하다. 반면에, Stack이나 Heap은 dyna..
2023.12.01
no image
2. CPU Virtualization
CPU virtualization에는 크게 2가지 개념이 중요하다. 1번 포스트에서 다루었던, context switch랑 scheduler(스케쥴러)이다. Context switch는 방법론적인거고 scheduler는 정책적인 내용이다. 간단하게 자주 사용하는 용어부터 알아본다. Workload: 해야되는 프로세스(어플리케이션)의 양 Scheduler: ready process를 실행할 타이밍 결정하는 방법 Metric: 평가방법 스케쥴링의 목표(=평가 요소)는 다음과 같다. Turnaround time completion_time - arrival_time (minimize) Response time initial_schedule_time - arrival_time (minimize) Throughp..
2023.11.27
no image
1. Introduction
Operating system OS의 역할 중 중요한 3가지는 다음과 같다. Virtualization Concurrency Persistence Virtualization Process 프로세스는 execution stream with states이다. State에는 코드에 영향을 줄 수 있는 모든 자원이 포함된다. 가령 레지스터나 힙, 스택, 열린 파일 등이 있다. 프로그램 vs 프로세스 프로그램과 프로세스는 다른 개념이다. 프로그램은 정적인 코드와 데이터이며, 프로세스는 이런 프로그램의 dynamic instance이다. 쓰레드 vs 프로세스 쓰레드와 프로세스는 비슷한 개념이다. 쉽게 설명하자면, 쓰레드는 lightweight process이며, 하나의 프로세스는 여러개의 쓰레드를 사용할 수 있다...
2023.11.21
no image
[CHI 2001, Sensetable] Sensetable: A Wireless Object Tracking Platform for Tangible User Interfaces
오늘 소개할 논문은 Sensetable입니다. Humac Computer Interaction(HCI)의 Tangible User Inteface(TUI) 분야의 연구로, 과학관 같은 곳에서 프로젝트로 상호작용하는 것을 구현하였습니다. 기존에는 컴퓨터 비전 기술이나 wire를 puck(상호작용에 사용되는 물체)에 연결하여 TUI를 구현하였는데, 인식이 부정확하며 느린 반응속도를 보이거나, wire를 사용함으로써 거추장스러워지는 단점을 가지고 있었습니다. 본 연구에서는 이 문제를 해결하고자, 전자기를 이용해 물체를 인식하며 dial이나 modifier를 쉽게 장착할 수 있게 만들어, 보다 다양한 상호작용을 할 수 있게 된 것이 특징입니다. Introduction 기존 연구의 한계는 컴퓨터 비전 기술을 활용..
2023.11.18
Kubernetes
https://youtu.be/JHtO3kKajhk 위 영상을 참고해 작성한 글입니다. Kubernetes란? 컨테이너화된 응용 프로그램에 대한 자동화된 배포, 확장, 관리를 위한 오픈 소스 소프트웨어 Container가 1개~2개로 적은 수를 관리하는 경우, docker로 해결이 가능하지만 container가 100개, 1000개가 되면 관리가 어려워진다. 관리를 좀 더 쉽게 하고자 나온 것이 Kubernetes이다. 이 외에도 다양한 플랫폼이 있지만, 대기업에서 주로 사용되고 있는 것은 Kubernetes이다.
2023.07.20