컴퓨터 = 하드웨어 + 소프트웨어
산술/논리 연산 장치(ALU) + 제어장치 + 레지스터로 구성되어있다.
주기억장치(RAM, ROM) + 보조기억장치(디스크, 씨디)
폰 노이만 구조
중앙처리장치 : 중앙처리장치는 연산을 수행하고 기억장치에 기억되어있는 명령어들을 수행하는 컴퓨터 시스템을 이루는 핵심 부품.
가산기 + 보수기 + 누산기 + 기억레지스터 + 데이터레지스터로 이루어져 있음
캐시나 메모리로부터 읽어 온 데이터는 레지스터라는 CPU 전용의 기억장소에 저장된다. ALU는 레지스터에 저장된 이 데이터를 이용해 산술 연산을 수행한다.
부동소숫연산장치, 정수연산장치, 논리연산장치 등이 있다.
중앙처리장치 내부에 있는 기억장치.
범용 레지스터(주로 산술 연산 논리장치에 의해 사용), 전용 레지스터(PC등 특수목적에 사용)로 구분된다.
자신 및 주변기기를 컨트롤하는 장치.
프로그램 계수기(프로그램의 수행 순서를 제어), 명령 레지스터(현재 수행중인 명령어의 내용을 임시로 기억), 명령해독기(명령 레지스터에 수록된 명령을 해독해 수행될 장치에 제어신호를 보냄)
제어 장치 구현
- Hardwired 고정배선제어
-제어신호가 Hardwired Circuit에 의해서 생성되도록 하드웨어를 구성.
-상태계수기와 PLA(Programmable Logic Array) 회로로 구성된다.
-고속 처리, 고가
-RISC 시스템에 적용- Micro Program
-발생 가능한 제어 신호들의 조합을 미리 구성.
-ROM에 저장했다 필요시 신호를 발생시ㅣ는 Software방식
-하드웨어 방식에 비해 속도도 낮고 가격도 저렴하다.
-CISC에 적용
명령어 인출 및 해독은 모든 명령어들에 대해 공통적으로 수행한다.
기억장치로부터 명령어를 읽어온다.
데이터 인출 및 처리, 쓰기와 같은 것들은 명령어에 따라 필요할 때만 수행한다.
이 명령어 및 명령어 수행 과정과 처리방식이 CPU에서 핵심인 부분이다.
기억소자(반도체). 전류를 흐르게도 하고 흐르지 않게도 하는 특징을 통해 임시적인 내용들을 기억하게 만든다.
메모리가 CPU와 데이터를 주고받는 시간을 말하며 액세스라고 한다. 단위는 ns(나노세컨드: 10억분의 1초)
프로그램의 수행 속도에 영향을 준다. CPU에서 직접 접근이 가능한 유일한 저장장치.
SRAM(리프레시 필요없음, 저전력, 고가), DRAM(저가)
대부분 읽을 수만 있는 장치로 구성. 전원이 끊겨도 데이터가 날아가지 않는다.
원판 표면의 철 입자의 방향, N/S극으로 0과 1을 표현한다.
플로피디스크(FDD), 하드디스크(HDD)
빛의 반사를 이용해 자료를 읽는 저장매체.
1세대: CD / 2세대: DVD / 3세대: 블루레이 디스크 / 차세대: 테라디스크, HVD
전자적으로 데이터를 지우고 쓸 수 있는 비휘발성 메모리로 충격에 강하다. 휴대용 기기에 많이 쓰임.
USB, SSD(기계적 장치는 빠졌지만 저전력 저소음 저중량)
Cache : 보관, 저장
CPU 내 또는 외에 존재하는 메모리.
메인 메모리와 CPU 간의 데이터 속도 차이를 극복하는 완충 역할을 한다.
캐시 메모리는 메인 메모리의 일정 블록 사이즈의 데이터를 가지고 있다가 CPU에 워드 사이즈 만큼의 데이터를 전송한다.
이때 이 사이즈들이 캐시의 성능에 영향을 미치는데, 블록사이즈나 워드사이즈의 크기에 따라 캐시 메모리 적중률(Hit Ratio)이 다르기 때문.
CPU가 필요한 데이터가 캐시메모리 내에 들어와있으면 Cache Hit라 하고 없을 경우 Cache Miss라고 함. 원하는 데이터가 없을 경우 주기억장치로부터 데이터를 읽어오게 된다.
원하는 데이터가 캐시에 있을 확률을 Hit Ratio라고 한다.
캐시 참고자료 http://contents.kocw.net/KOCW/document/2015/shinhan/leedonggyu/9.pdf
공룡책으로 정리하는 운영체제
https://parksb.github.io/article/5.html
OS 목적과 기능
목적 : 처리능력, 사용가능도, 신뢰도 향상, 반환시간 단축
기능 : 자원관리, 스케줄링, 인터페이스, 하드웨어 네트워크 관리제어시스템 자원 관리
응용 프로그램은 권한에 대한 관리가 필요하다. 여러사람이 하나의 기기를 사용하는 경우 사용자를 관리하는 일도 중요하게 된다.
응용프로그램을 사용하려면 권한을 부여받아야한다. 권한을 받으면 운영체제가 제공하는 기능을 이용할 수 있다.
운영체제 차원에서 다양한 함수를 제공하는 것을 시스템 콜이라고 부른다.
예를 들어, 응용프로그램이 프린터 사용에 대한 권한을 획득한 후에는 프린터를 사용할 때 필요한 API를 호출해야 한다. 이 API는 시스템 콜로 이루어져 있다.
프로그램이 실행중인 상태
생성 -> 준비 -> 실행 -> 대기 -> 완료
프로세스 vs 프로세서
프로세스: 특정 목적을 수행하기 위해 나얄된 작업의 목록
메모리에 적재되어 프로세서에 의해 실행중인 프로그램
프로세서: CPU를 의미, 데이터 처리 시스템을 의미.
명령어가 CPU를 통해서 수행되는 객체의 단위
프로세스 내에서의 작업 단위. 경량 프로세스라고도 한다.
같은 프로세스 내에 있는 스레드는 같은 주소 공간에 존재하며 동일한 데이터에 접근 가능. 하나의 스레드가 수정한 메모리는 같은 메모리를 참조하는 스레드에 영향을 미친다.
여러개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해 필요하다.
가상 CPU, 수행코드, 처리데이터
하나의 스레드는 한번에 하나의 명령을 수행한다.
각 스레드마다 콜 스택이 존재하며 나머지 영역은 공유한다.
다른 스레드와 독립적으로 동작한다. 두개 이상의 스레드가 동작하는 경우 실행 및 종료 순서를 예측할 수 없다.
싱글 스레드
프로세스가 단일 스레드로 직렬 처리하는 방식.
장점
- 자원 접근에 대한 동기화 신경쓰지 않아도 됨
- 문맥 교환작업을 요구하지 않음
- 쉽고 메모리를 적게 사용
단점
- 여러개의 CPU 활용하지 못함
- 연산량이 많은 작업 시 선점된 작업이 완료되어야 다른 작업 수행 가능
- 에러처리가 안되면 멈춘다.
멀티 스레드
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업 수행.
여러 개의 CPU를 사용해 여러 프로세스 동시에 수행.장점
- 실시간으로 사용자에게 응답
- 한 프로세스를 여러 프로세서에서 수행(효율적)
단점
- 설계가 어렵고 디버깅이 어렵다
- 다른 프로세스에서 스레드를 제어할 수 없음
- 자원 공유 문제
- 문맥 교환 작업 필요
- 데드락, 교착상태
- 뮤텍스, 세마포어
컴퓨터에 있는 코어 개수로 스레드 수가 제한된다. (싱글코어/멀티코어)
운영체제는 각 스레드를 시간에 따라 분할해 여러 스레드가 일정 시간마다 돌아가면서 실행되도록 한다.(시분할)
더이상 사용하지 않는 메모리를 자동으로 정리하는것
자바스크립트는 고수준 언어로서 가비지 컬렉션이 내장되어있다.
c언어와 같은 저수준 언어에서는 1번부터 3번까지 개발자가 직접 명시적으로 사용할 수 있다. 그러나 자바스크립트는 자동으로 구현되는데, 메모리가 더이상 필요하지 않은지에 대한 판단은 어렵기 때문에 제한적인 해결책만을 구현한다.
가비지 컬렉션 알고리즘이 의존하고 있는 개념
- 참조
자바스크립트 객체는 자신의 프로토타입에 대해 암묵적인 참조를 갖고 있고, 자신의 속성값에 대한 명시적 참조 또한 갖고있다.- 렉시컬 스코핑
변수 이름이 중첩된 함수에서 해석되는 방식을 정의.
중첩되어 있는 더 안쪽의 함수는 부모 함수가 값을 반환한 뒤에도 부모 함수의 스포크를 포함하고 있음.
레퍼런스가 복사될 때마다 +1
참조하고 있던 변수의 값이 바뀌거나 스코프를 벗어나면 -1
레퍼런트 카운트가 0이 되면 메모리를 비울 수 있음.
한 객체에 flag를 두고 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법.
객체에 in-use flag를 두고 사이클마다 추적하여 사용여부를 표시한다. 표시되지 않은 객체는 삭제(sweep)한다. 대부분 이 알고리즘을 이용한 가비지 컬렉터를 장착하고 있다.
mark and sweep 알고리즘은 객체에 접근할 수 있는지를 통해 필요여부를 판단하고 3단계를 거친다.
1. 루트(전역변수): 자바스크립트에서 window, node.js에서 global. 모든 루트의 완전한 목록을 만들어낸다.
2. 모든 루트와 자식들을 검사해서 활성화 여부를 표시. 루트가 접근할 수 없다면 가비지로 표시.
3. 마지막으로 가비지 컬렉터는 활성으로 표시되지 않은 모든 메모리를 OS에 반환.
참조되지 않은 객체는 접근할 수 없는 객체이다. 전자의 카운팅 방법보다 나은 방법이라 할 수 있다.
주요 원인은 예상치 못한 참조(더이상 사용되지 않을거라 생각했지만 모종의 이유로 활성화 상태인 루트 트리 안에 존재하는 메모리 조각)이다.
더이상 사용되지 않지만 코드상 어딘가에 유지되어 해제되지 못한 변수들을 이른다.