os를 배우면서 가장 중요한 요소라고 생각되는 부분이 컴퓨터 시스템의 자원을 효율적으로 관리한다.
운영체제란?
운영체제(Operating System)는 컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 하는 시스템 소프트웨어입니다. 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 즉, 중개자 역할을 해주는 프로그램입니다.
💎 운영체제의 역할 및 목적
- 자원관리컴퓨터 시스템 자원 효율적 관리(시스템 자원 - CPU, Memory, I/O장치와 같은 하드웨어 자원과 프로세스, 파일 메시지 등의 소프트웨어 자원)
- 자원 보호프로그램이나 다른 사용자가 데이터를 삭제하거나 중요 파일에 접근하지 못하게 컴퓨터 자원들 보호
- 인터페이스 제공하드웨어 인터페이스와 사용자 인터페이스 제공하여 편리하게 사용하도록 지원
<운영체제의 목적>
응답시간 (Turnaround Time)작업 의로 후 시스템에서 결과가 얻어질 때까지의 시간
처리능력 (Throughput) | 시스템의 생산성을 나태내는 단위. 일정시간 동안 처리하는 일의 양 |
사용 가능도(Availability) | 시스템을 얼마나 빠르게 사용할 수 있는가의 정도 |
신뢰도 (Reliability) | 주어진 문제를 얼마나 정확하게 처리하는가의 정도 |
🔍 운영체제 종류
운영체제의 경우 크게 임베디드, 서버, 모바일, 데스크톱의 4개의 시장으로 나뉘어 있습니다. 임베디드의 경우 리눅스 계열, 서버는 유닉스 계열, 모바일은 안드로이드, 데스크톱은 윈도즈가 점유율이 가장 높습니다.
1. Windows
MS사에서 개발한 컴퓨터용 운영체제. 데스크톱 OS 중 가장 많은 점유율을 차지합니다. 점유율이 높은 만큼 사용자에게 최적화가 가장 잘되어있는 운영체제이지만 개발자를 위한 환경은 부족한 부분이 많아 개발을 할 때는 잘 사용하지 않습니다.
2. Linux
리누스 토르발스가 커뮤니티 주체로 개발한 컴퓨터 운영체제입니다.다중 사용자, 다중 작업, 다중 스레드를 지원하는 네트워크 운영체제이며 무료 오픈소스입니다.
3. Unix
70년대 초 벨 연구소 직원 켄 톰슨, 데니스 리치, 더글러스 매클로이 등이 개발.멀티태스킹과 다중 사용자 방식의 시분할 운영체제이고 현대적 컴퓨터 대부분의 운영체제의 원형이 된 운영체제라고 볼 수 있습니다. 서버 운영에 필수적인 CLI에 특화되어 있어 서버 시장에서 인기가 많습니다.
💻 운영체제의 유형
일괄처리 시스템(Batch processing system)
유사한 작업들끼리 일정량 또는 일정 시간 묶어서 처리하는 방식. 컴퓨터 시스템을 효율적으로 사용할 수 있지만 하나의 작업이 모든 자원을 독점하므로 CPU 유휴 시간이 줄어듦ex) 초기 Punch Card 처리 시스템, ORM카드 등등
다중 프로그래밍 시스템(Multi programming system)
하나의 CPU와 주기억 장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식. CPU와 대화하면서 처리가 가능하여 CPU 사용률과 처리량이 증가
시분할 시스템(Time sharing system)
시간을 분할하여 여러 사용자들에게 컴퓨터 자원을 번갈아가며 할당하면 사용자는 자신이 컴퓨터를 독점하고 있다는 느낌을 주게 됨.
실시간 시스템(Real-Time system)
.ex) 원자로 / 공장 제어, 미사일, 반도체 장비, 로봇 제어와
→deadline이 결정된시스템
다중처리 시스템(Multi-processing system)
여러 대의 CPU와 하나의 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리하는 방식. 단일 운영체제에 의해 관리되며, 하나의 CPU가 고장 나더라도 시스템의 신뢰성과 안정성을 보장할 수 있음
분산 컴퓨팅(Distributed computing)
넷상으로 연결된 여러 대의 컴퓨터들의 처리 능력을 이용하여 복잡한 계산 문제를 해결하려는 분산 처리 모델
🔨 운영체제의 기능
- 프로세스 관리 : OS에서 동시에 실행되는 많은 프로세스를 효율적으로 관리
- 파일 관리 : 파일 생성, 수정, 삭제, 조작, 백업 등등
- 네트워크 관리 : 네트워크 서비스 성능, 오류분석, 프로비저닝, 품질관리 등등
- 메인 메모리 관리 : 메모리 추적, 프로세스에 따른 메모리 할당
- 보조 스토리지 관리 : 스토리지 할당, 여유 광간 관리, 디스크 스케줄링
- 입출력 장치 관리 : 버퍼 캐싱 시스템 제공, 장치 드라이버 제공
- 보안 관리 : 시스템 보호 및 오류로 인한 시스템 손상 방지
- 명령어 해석 시스템 : 사용자와 시스템 간의 인터페이스. 인터프리터, 쉘 등등
- 프로세서, 메모리, 입출력 장치, 파일 및 정보 등의 자원 관리
- 시스템 자원 보호 기능
- 효율적인 자원 관리 및 분배를 위한 스케쥴링 기능
- 사용자와 시스템 간의 편리한 인터페이스 제공
- 각종 시스템 하드웨어와 네트워크 관리 및 제어
- 데이터 관리, 공유
- 시스템의 오류 검사 및 복구
- 입출력에 대한 보조기능
- 가상 계산기 능력 제공
컴퓨터는 finate state machine이다.→define state(reg,mem)→state가 바뀜 ==메모리 값이 바뀜
premitive →os에 의해서 interruupt된상태
1장
1950 시리얼 프로세싱
os역할을 사람이 했다.
인력이 싼편이다.
1960
(single)batch processing
연산이 비슷한 종류들끼리 모아서 한번에 처리 cpu 유틸라이제이션을 높임
file I/o가 cpu동작보다 길었음 이것을 줄이자
1960~1970
multiprogramming
메모리 가격이 작아지고 대용량 메모리가 되어서 i/o를 숨기는 방식을 택함
싱크로 동일한시간대 보장
어싱크로 입력이 올때 까지 몇초나 걸릴지모름
1970~1980
interactive computing 대화형 시스템이 요구사항이였다
time sharing 이 사용됨
response time이 중요해짐
1990
인터넷
2010
사물인터넷
real time system
hard real time system:데드라인안에 무족건 끝남
soft real time system:Qos(한번정도는 실수할수있다):특정프로세스가 데드라인에 끝나지만 적은확률로 넘김
시스템에서 이 데드라인을 넘어도 별지장이없다
2장
os를 바라보는관점
virualization:사용자가 무한개의 cpu를 가지고이쓴것처럼 일루젼제공
cpu virualization:사용자가 무한개의 cpu를 가지고이쓴것처럼 일루젼제공
memory virualization:사용자가 무한개의 memory를 가지고이쓴것처럼 일루젼제공
concurrency 동시성
persistence:임의의 시간이지나도 데이터가 손상되지않고 보장해주는것
cpu 가 바라보는 메모리는 항상 array of byte이다.
concurrency자원 동시 접근
thread →concurrency 문제
global ,static variable
3장 introduction to computing systems
controller
reg
buffer가 메모리 역할을함
memory
cpu
mode bit →reg
reg에 저장된 데이터
timer: 1980년
메모리주소가 바뀌는건 instruction set 이 바뀌는것
3. I/odevice
폰노이만 아키텍쳐 컴퓨터구조를 가지고있다
cpu가 필요한 동작을 던지기만하면됨→dma와 쿵짝쿵짝해서 cpu 다른일을 할수있게함
I/o를 위한 또다른 os이다 :device driver
4.exception
os는 모든
exception cpu등이 해결못해서 권한을 os에게 넘겨서 해결
Asychronous exception 비동기적 예외: 외부입력이라 일정하게 멈추지 않음 언제 나타날지 모름
excption→interupt(외부에 의해 발생)→Asychronous
interrupt : 하드웨어 외부에 의해서 현재 수행되는것이 멈춤
원인1:
timer interrupt
원인2:
i/o interrupt 외부 디바이스에 의해 발생된것
키보드의 컨트롤씨를 쳣을때
네트워크 패킷이 도착했을때
메모리가 도착하였을때 외부 디바이스 디스크에서hdd ssd
ex)timer 외부에서 cpu 사용시간이 다되었다고함
interrupt 발생 이후에는 next instruction발생
exception은 넘버링이되어있다
os → excepting table
sychronous exception 동기적 예외 : 프로그램을 반복해서 돌려도 항상 같은 곳에서 발생하는 문제
or sw exception
: trap,faults abort 세개 존재
내부적 프로그램 코드에서 발생
trap:시스템 콜같이 사용자가 하드웨어의 기능을 활용하고 싶을때 종료시 next instruction(ex scanf)
faults: 메모리 부족→디스크에서 찾는 것처럼 pagefaults가 대표적 (디스크와 메모리가 같으면 안일어남)→수행중에 멈춤(예상치못함) 그래서 재수행(current instruction 수행)
unrecoverable 과 unrecoverable: os도 user도 해결불가
aborts: os도 해결못함 사람을 불러서 해결
handling exception: exception을 어떻게 처리할건지
exception은 넘버링이되어있다
dma(direct memory access)→i/o에서 오는 신호(입력)을 memory에 직접적으로 넘겨서 cpu가 그동안 다른일을 할수있도록 해줌
I/o→dma→cpu에게 bus 허락받음→dma→i/0→memory
I/o 버스써서 메모리와 직접적으로 주고받고 끝났으면 interrupt발생시켜서 cpu에게 kernal에서 usermode로 변경
start 부터 wordcount만큼의 데이터를 써라
5.dma
operation mode→dma operation
burst, bus를 당장 I/o가 써야함
cycle steal , 중요도가같아서 서로 같은 cycle로 이루어짐
transparent cpu가 bus를 사용하지 않을때만 사용하는거
장점:cpu 영역 확보
단점: 하드웨어라서 dma추가하면 비용발생
6.bus :mainboard안에 존재
Northbridge cpu 메모리 gpu 등
southbridge 느려도 되는것들 usb 프린터 마우스
mode bit 0or1
유동성이 높고 interrupt발생시에 usermode kernel mode를 결정해줌
4~5장
Process API
Introduction에서 배웠다시피, OS는 사용자가 OS의 기능을 사용할 수 있도록 API를 제공해야 한다.
- CreateOS는 사용자가 새 프로세스를 생성할 수 있도록 지원해야 한다.
- Destroy보통 프로그램들은 작업을 마치면 알아서 종료되지만, 그렇지 않은 프로그램의 경우 사용자가 임의로 프로세스를 종료할 수 있도록 지원해야 한다.
- Wait종종 프로세스가 잠시 실행을 중단해야 할 일이 있다. I/O라든지, 전에 짧게 배운 Concurrency 문제를 해결하기 위해서라든지.
- Miscellaneous Control프로세스를 생성하고, 소멸시키고, 대기시키는 것 이외에도 프로세스를 '잠깐 멈추었다 다시 실행'하도록 하는 기능 따위를 제공할 수도 있다.
- Status프로세스가 얼마나 오래 실행되고 있는지, 어떤 상태값을 가지고 있는지를 확인할 수 있는 기능을 제공해야 한다.
1.finite statemachine(isa)머신의 상태와 상태를 바꾸는것 → memory reg (state) →instructinon(operation)
context switch 할때만 os가 위치한 메모리안의 pcb값에 현재 상태 저장 scheduling→수행될순서가 되어서 cpu 권한을 받음
ㄴscheduling policies, context switch →os가 제공
process 메모리안에 존재 프로
cpu는 메모리와만 소통 본노이만아키텍쳐 기반]
program
program프로그램→disk안에있다. load가능함,프로그램을 다운받는다 enf형태 실행가능한형태
process프로세스→메모리안에있다, 프로그램 전체,일부가 메모리에 올라오면 프로세스,
본노이만 아키텍쳐 기반→ cpu는 메모리와만 커뮤니케이션을 함 →cpu와 디스크는 못주고받음ㅇㅇ
cpu와 메모리 커뮤니케이
→디스크에 있는 애들은 실행가능할뿐 cpu가 실행할준비가 되어있지않다
메모리에 올라오면 os 가 실행가능하고 판단하여 순서지정
fetch : code가 메모리에 올라가는것 (프로그램→프로세서)
os는 lazily하다 →미리하지않는다 →왜냐 :리소스제약이 있어서(메모리제약) user가 필요할때 그때마다 들고
3-state,5-state
순서:
2-0. new(creation)→ready
1.block(wait)→2.ready→3.running==다 메모리에 존재
→3-1exit(terminated)
1.해당 프로세서가 실행될 리소스 부족+cpu권한x →i/o가 도착하면 ready로 넘어감 리소스 충족
2.해당 프로세서가 실행될 리소스 가짐+cpu권한x cpu권한만 있으면 바로 실행가능
1,2는 Q에서 기다리는건 똑같지만 리소스차이로 다르다.
3.해당프로세서가 실행될 리소스 가짐+cpu권한o
ex)time slice 가 1초인상태에서 3-state 이면 러닝스테이트에서 time interrupt가 생겨 1초마다 멈춘다. os가 상태 usermode를 저장하고 커널모드로 cpu권한을 얻고 ready q에서 다음 수행할 프로세서를 찾은후 다음인스트럭션을 수행함
2-0. new(creation):
메모리에 올라왔지만 리소스가 부족 →메모리할당(black)+사용자요청(creation)→ready
3-1exit(terminated)
:메모리에서 쫓겨남 수행 다 끝나면 메모리에서 디스크로 보냄
주민등록 말소,Q와 메모리 데이터가 디스크로 쫓겨남
pcb또한 제거됨
pcb는 processer control block : os가 프로세스가 멈춘상태 그대로 가지고 있다가 다시 세팅 restore할수있게함
zombie/orphan state
→os안에 pcb 정보가 남아있다
blacked I/o만있으면 ready
디스크/메모리존재 creation 메모리가올라왔지만 리소스가 부족 admit os가 cpu 권한을 process에게 넘겨주는것
디스크 terminate 메모리에서 쫓아냄 release
7-state (block suspend state,ready suspend state→프로세서아님 메모리에 없음→disk(swapspace에 있다)
새로운 프로세서가 creation이 될라면 기존 메모리에 있는것을 쫓아내고 새롭게 creation해야됨→빈공간생성
따라서 blocked state,ready state,running state 셋중에 한부분을 쫓아내야 됨→
어차피 cpu의 권한을 주더라도 i/o가 오기전까지 실행하지 못한 block를 디스크로 잠간 쫓아냄(swap out)==block suspend state
(swap out)(swap in)
memory에 os와 user space가 있음
user mode →IO : DMA가 함 ===IO가 발생하면 시스템에 무족건 나쁜영향을줌 빈번하게 발생시 숨기기 힘듬
memory에 user space에 있는 우선순위가 낮은애들을 disk의 swap space에 내리는게 swapout 올리면 swap in
따라서 swap을 어떻게 효울적으로 하는지 아직까지 많은 논란
swap: swap in swap out
PCB(Process Control Block)→메모리 os영역에 존재(프로세스 개별마다 한개씩존재)
OS가 프로세스의 상태를 추적하기 위한' 데이터 구조체
→os영역의 메모리 커널stack에 저장되고 필요할때만들고 없앰
6장
[Operating System] Mechanism : Limited Direct Execution
cpu virtualization
1.direct execution:
하드웨어 접근할때 안정성 보장x,예전 방식이라 os가 존재하지않았고 API형태나 라이브러리 형식으로 존재하였다(당시 os api를 제공하는 라이브러리형식)
시대에 따른 발전→
direxct execution →limited direct execution(lde)
2.lde : direct excution을 어느정도 제한을 하여 io요청 하드웨어 접근 메모리 접근 os가 제공을 해주어야함
→어린아이들 침범못하게 경계선같은것
user level process→limited direct execution→os
system call →하드웨어에 접근할려면 오직 systemcall을 사용해야됨
ide problem1:
하드웨어에 유저가 접근하면 안되니까 미리 사전에 정의된 방식 sys call을 사용해서 하드웨어에 접근해라
요청을 던져주는것 systemcall →os가 받음 커널모드로 변경 후 요청처리 다시 반환해줌
system call:
프로세스가 생성될때 그 프로세스에 대한 pcb를 만듬
create push
exit(terminated) pop
push pop
ide problem2:
현재 수행중인 시스템콜을 어떻게 멈출거냐
cooperative approach: 시스템콜을 기다림
프로세스들이 알아서 자기가 사용하는 cpu권한을 알아서 잘 넘겨줄거야 라고 믿는것→프로세스가 알아서 반납할거라고 믿음 반납되면 cpu를 권한을 잡아서 사용
system call을 요청할때만 cpu권한을 잡아서 사용
(abort 제외)
1강제로 뺏어서 사용하지 않음
2cpu를 독점하고 싶으면 i/o를 요청하지 않고 무한루프나 프로세스를 강제로 끊을 방법이 없다
system call(yield): 초기 방식
예전 자발적으로 해당 cpu권한을 포기하고 os에게 넘겨줌 프로세스가 주기적으로 yield에 의해서 cpu권한을 만지겠다는것→한 프로세서가 독점할수있다는 문제점→대책이 없어서 밑에 방법을 최근에 따름
Non-cooperative approach:
user program에게 cpu권한을 뺏어서 사용
time sharing 등등 특정시간 지나면 뺏어서 사용
난 프로세스를 못믿고 알아서 끊고 cpu권한을 뺏어서 들고옴
→해당되는 코드가 수행중에
system call이 아니라도 멈추어야되는 상황에 독점시키지 않도록
context switching:다음 프로세서를 고르는 정책
→scheduler 멈추면 context switching이 된다
프로세서가 멈추면 os의 커널영역에 process 컨트롤 블락pcb에 저장시키고 다음에 수행될 프로세서를 세팅하는것
세팅할려면 reg값이 있어야됨 이게 context==reg값를 포함한 수행될정보를 저장하고 세팅
개별 프로세스context를 교체하는것
pcb : 프로세스가 수행될 모든 정보를 os 커널에 데이터 스트럭쳐 형태로 저장 관리하는것
context switch time :너무자주하면 컴퓨터의 성능을 떨어뜨림
→
1.timesharing 목적:
멀티 프로세싱,멀티 테스킹 →cpu (유틸라이제이션) 사용량을 극대화
time sharing 을 통해서 response time을 최소화 →결정하는것 time slice
응답시간을 최소화 하는 방법 time slice를 줄이는것
무작정 줄이면 좋을까?아니다
왜냐 메모리에 저장하고 다시 수행할것을 세팅해야되는 악영향 메모리에 대한 접근 i/o에대한 접근에 대해 손실이 크게 날수있다.
context switching overhead 에 의해서 사실상 결정됨
→사용자 환경과 다양한 요인에 따라 time slice 하는것이 다름
2.몇개의 프로세서는 멀티 레지스터셋을 제공한적이있다
→레지스터를 추가하여 칩이 커지고 가격이 커지는데 고비용이 크기 때문에 사용안하긴함
→한 레지스터에 여러가지 몇개의 프로세스를 제공하는것
pcb0에 현재상태 저장후 스케줄러에 의해서 pcb1에 앞으로 수행될 애들 넣은뒤 kernal모드에서 →user mode에서 pc값 세팅 후 수행됨
스케줄러: scadular 앞으로 실행될 프로세서를 고르는 알고리즘
concurrency동시성에대한 걱정
문제 여러개를 수행하였는데 전부 interrupt또는 trap handling이 발생하였다
interrupt를 걸었으면 다른 프로세서는 접근이 안되게끔
필요할때만 만들었다가 없앰 pcb
==(비슷함)os가 저장된 메모리영역에 커널영역 stack 필요할때 쓰고 없으면 날림
system call일때
trap 이 발생하면 trap handler의 주소로가서 커널 스테이트에 저장을 하고 kernel code로 해결
handle trap →펌웨어에 저장
부팅→boot trap발생→os→롬 →os가 올라가는 메모리영역에 저장됨
7장scheduling: introduction
이전까지 CPU의 가상화를 위한 메커니즘을 공부했다면, 이번 챕터부터는 고수준의 Policy, 그러니까 어떻게 작동할지 결정하기 위한 알고리즘을 배웠다.
성능과 공정함 사이의 trade-off라
스케줄링 →ready queue에서 어떤 프로세스를 선택하여 cpu를 먼저 줄지에 대한 정책 방법
스케줄링 기법:short term scheduling 만 취급한다
scheduling:
다음에 누구한테 cpu 권한을 줄지 →수행가능한 애한테 줌
*이수업에서 스케줄링은 ready queue에서 만 고려함
FIFO(first in first out)
SJF(shortest job first)——-비선점
STCF(shortest time completion first)선점
Round Robin(RR) response time
Incorporating I/o←스케줄링 기법은 아님
MLFQ
lottery
stride
어떤 순서로 os가 접근할지
스케줄링의 대상은 프로세서이다. 쓰레드도있는데 지금안봄
os가 생기기전부터 있던 방식 —>job 스케줄링
2-1 scheduling criteria
user turnaround time(TAT ,response time
system throughput 처리양,process utillizaion
스케줄링 무엇이 나쁘고 좋은지 판단 기준
- cpu utillzation cpu사용량:얼마나 리소스를 효율적으로 사용하였는가
- throughput 처리양 : 작업시간내에 얼마나 처리하였는가
- turnaround time(TAT) : total적으로 완벽하게 처리될때까지 걸리는 시간 /수행하는 시간 전부를 다 포함시킴,모든 요청이 완료되었을때의 기간
- waiting time: ready queue에서 기다리는 시간 다음cpu권한을 얻을때까지의 시간
- response time
요청을 하고나서 첫번째로 응답이 왔을때까지의 시간
- fairness 공평성 : 몰빵되서 할당되지않고 최소한의 확률로 조금이라도 시스템이 수행되도록 함 →특정프로세스가 cpu의 권한을 오래동안 못받는것은 올바르지않다 조금이라도 보장해주는것
→fairness (정량을 맞추는게 아니라 고려하여 조금식수행시킴)
사용자의 response time만 중요시하지 않게→시스템에 성능이 안좋을수있다
몰빵되서 할당되지않고 최소한의 확률로 조금이라도 시스템이 수행되도록 함
short term scheduling 만 취급한다
ready queue에서의 스케줄링 기법만 취급함
모두를 만족시키는 스케줄링 기법은 없다
next process를 선택하는 스케줄링기법
long term:디스크에서 creation을 하는 기법
mid term 스케줄링기법: 메모리용량이 부족해서 어떤것을 선택해서 잠시 disk에 내리는것 swaping 어떤것을 먼저 올릴지(메모리와 디스크 사이를 참견하는것)
스케줄링 용어:
preemptive scheduling:os에서 강제적으로 현재 수행중인 프로세스를 멈추고 cpu권한을 가짐
과도하게 time slice을 줄이면 너무 잦은 context switch이 생김(메모리 접근에 시간 걸림)
nonpreemptive scheduling: time sharing 불가 무한정 기다림
responsetime을 안좋음
응답시간이 길어지는것을 의미
cpu burst: cpu에서 연산이 대부분인것
I/o burst: 빈번하게 I/o를 요청하는것
현재까지 장치에 따른 서로다른 스케줄링기법을 사용중
- 모든 작업들은 같은 시간 동안 실행된다.
- 모든 작업들은 동시에 도착한다.
- 일단 작업이 시작되면, 각각의 작업들은 완료될 때까지 실행된다.(non-preemptive)
- 모든 작업들은 I/O 요청 같은 별도의 작업 없이 CPU만 사용한다.
- 작업의 실행 시간을 모두 알고 있다.
관점
1.turnaround time:
𝑻𝒕𝒖𝒓𝒏𝒂𝒓𝒐𝒖𝒏𝒅 = 𝑻𝒄𝒐𝒎𝒑𝒍𝒆𝒕𝒊𝒐𝒏 − 𝑻𝒂𝒓𝒓𝒊𝒗𝒂𝒍
완료-도착
2.response time
3.fairness
1.First In, First Out (FIFO)
'[CS] 컴퓨터 공학 > CS 수업 정리' 카테고리의 다른 글
[CS] 네트워크 프로그래밍 (0) | 2023.07.05 |
---|---|
[CS] 컴파일러 compiler (0) | 2023.07.05 |
[CS] 컴퓨터구조 어셈블리 계산기 (0) | 2023.02.09 |
[CS] 자료구조 및 시스템 프로그래밍 TOP , disk I/O diskstats 구현 (2) | 2022.12.11 |
[CS] 컴퓨터구조 ch.2 (0) | 2022.09.15 |