os모듈

자바스크립트는 운영체제의 정보를 가져올 수 없지만, 노드는 os 모듈을 통해 정보를 가져오는것이 가능하다.

os.arch() : 아키텍쳐 정보를 보여준다
os.platform() :  운영체제 플랫폼 정보를 보여준다.
os.type() :운영체제 종류를 보여준다.
os.uptime() : 운영체제 부팅 이후 흐른 시간을 보여준다.
os.hostname() : 컴퓨터의 이름을 보여준다.
os.release() : 운영체제의 버전을 보여준다.
os.homedir() : 홈 디렉터리 경로를 보여준다.
os.tmpdir() : 임시 파일 저장 경로를 보여준다.
os.cpus() : 컴퓨터의 코어 정보를 보여준다.
os.freemem() : 사용 가능한 메모리를 보여준다.
os.totalmem() : 전체 메모리 용량을 보여준다.

 

path 모듈

폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈이다.

path.sep : 경로의 구분자를 보여준다. windows 타입은 \, POSTIX 타입은 /을 경로 구분자로 사용한다.
path.delimiter : 환경 변수의 구분자이다. process.env.PATH를 입력하면 여러 개의 경로가 이 구분자로 구분되어있다. Windows는 세미콜론(;), POSTIX는 콜론(:)이다.
path.dirname(__dirname) : 파일의 폴더 경로를 보여준다.
path.extname(__dirname) : 파일의 확장자를 보여준다.
path.basename(__dirname, extension) : 파일의 이름(확장자 포함)을 보여준다. 파일의 이름만 표시하고싶다면 basename의 두 번쨰 인자로 파일의 확장자를 넣으면 된다.
path.parse(__dirname) : 파일 경로를 root, dir, base, ext, name으로 분리한다.
path.format(__dirname) : path.parse()한 객체를 파일 경로로 합친다. 
path.normalize(__dirname) : /나 \를 잘못 사용(중복 사용 혹은 혼용)했을 때 정상적인 경로로 변환한다.
path.isAbsolute(__dirname) : 파일의 경로가 절대경로인지 상대경로인지 알려준다.(true / false)
path.relative(dirA, dirB) : 경로를 두개 넣으면 첫번째 경로에서 두번쨰 경로로 가는 방법을 알려준다.
path.join(__dirname, ...) : 여러 인자를 넣으면 하나의 경로로 합쳐준다. 상대경로인 부모 디렉터리와 현 위치도 자동으로 처리해준다.
path.resolve(__dirname, ...) : path.join()과 유사하지만, /를 만나면 절대경로로 인식해 앞의 경로를 무시한다. 

 

url 모듈

url처리에는 두 가지 방식이 있다.

노드 버전 7에서 추가된 WHATWG방식과 기존 노드에서 사용하던 방식이 있다.

두 방식의 url 구분 방법은 다음 그림과 같다.

위쪽이 기존 노드, 아래쪽이 WHATWG의 구분 방법이다.

기존 노드 방식에서는 다음 두 메서드를 주로 사용한다.

url.parse(adress): 주소를 분해한다.
url.format(object): parse로 분해되었던 url 객체를 다시 원래 상태로 조립한다.

WHATWG 방식은 search 부분을 searchParams라는 객체로 반환한다.
search부분은 주소를 통해 데이터를 전달할 때 사용되는데, ?로 시작하여 키=값 형식으로 데이터를 전달한다.
여러 키를 전달할 때는 &로 구분한다.

searchParams객체는 다음 메서드를 지원한다.

getAll(key): 키에 해당하는 모든 값들을 가져온다.
get(key): 키에 해당하는 첫 번째 값만 가져온다.
has(key): 해당 키가 존재하는지 검사한다.
keys(): searchParams의 모든 키를 반복기 객체로 가져온다.
values(): searchParams의 모든 값을 반복기 객체로 가져온다.
append(key, value): 해당 키를 추가한다. 같은 키의 값이 있다면 유지하고 하나 더 추가한다.
set(key, value): append와 비슷하다. 하지만 같은 키의 값들을 모두 지우고 새로 추가한다.
delete(key): 해당 키를 제거한다.
toString(): 조작한 searchParams 객체를 다시 문자열로 만든다. 이 문자열을 search에 대입하면 주소 객체에 반영된다.

 

querystring 모듈

기존 노드의 url의 search 부분을 사용하기 쉽게 객체로 만드는 모듈이다.

querystring.parse(query): url의 query 부분을 자바스크립트 객체로 분해한다.
querystring.stringfy(object): 분해된 query 객체를 다시 문자열로 합한다.

 

global

자바스크립트의 windows 객체처럼 global도 전역 객체이다. 따라서 호출시 생략이 가능하다. 
ex) global.require - > require

전역객체라는 점을 이용해 간단한 데이터를 파일끼리 공유할때도 사용 가능하나, 남용시 프로그램의 규모가 커짐에 따라 유지보수에 어려움이 가중된다.

console

대표적으로 로그를 출력하는 console.log 메서드가 있다. 

이 외에도 다음 메서드들이 있다.
console.time(label)/console.timeEnd(label): 같은 레이블을 가진 time&timeEnd 메소드 사이의 시간을 측정
console.error(errorMessage) : 에러를 콘솔에 표시
console.dir(obj, option): 객체를 콘솔에 표시한다. 옵션으로 색상표시, 객체의 몇 단계까지 보여줄지 등을 설정할 수 있다.
console.trace(label): 에러가 어디서 났는지 추적한다.

time

setTimeout(callbackFunc, time): 주어진 시간(밀리초 단위) 이후 콜백함수를 실행
setInterval(callbackFunc,time): 주어진 시간(밀리초 단위)마다 콜백함수를 반복하여 실행
setImmediate(callbackFunc): 콜백함수 즉시 실행

위의 세 메소드는 모두 아이디를 반환한다.

clearTimeout(ID): setTImeout을 취소
clearInterval(ID): setInterval을 취소
clearImmediate(ID): setImmediate를 취소

__filename / __dirname

__filename: 경로와 파일명까지 반환
__dirname: 경로만 반환(파일명x)

module / exports

exports객체는 module.exports와 같은 객체를 참조하기 때문에 module.exports === exports는 true다.

ex) exports.A = '가나다'

process

process객체는 현재 실행되고 있는 노드 프로세스에 대한 정보를 가진다.

process.version : 설치된 노드의 버전
process.arch : 프로세서 아키텍처 정보
process.platform : 운영체제 플랫폼 정보
process.pid : 현재 프로세스의 아이디
process.uptime : 프로세스가 실행된 후 경과한 시간(초 단위)
process.exepath : 노드의 경로
process.cwd : 현재 프로세스가 실행되는 위치
process.cpuUsage : 현재 cpu 사용량
process.env : 시스템의 환경변수 출력. 서비스의 중요한 키를 저장하는 공간으로도 이용됨.(비밀번호나 API 키)
process.nextTick(callbackFunc) : 이벤트 루프가 다른 콜백 함수들보다 nextTick의 콜백함수를 우선 처리하도록 한다.
process.exit(code) : 실행중인 노드 프로세스를 종료한다. 0이면 정상 종료, 1이면 비정상 종료

1필드 2~4필드 5~7필드 8~10필드
타입 소유자 그룹 사용자 기타 사용자
- r w x r w x  r w x

유닉스는 위와 같이 각 그룹을 3비트로 표현하는데, 읽기 엑세스(r), 쓰기 엑세스(w), 실행 엑세스(x)를 제어하여 파일당 9비트로 보호 정보를 사용한다.

ex) -rwxr-xr-x  : 소유자 읽기 쓰기 실행 권한 있음/ 그룹 사용자 읽기 실행 권한 있음/ 기타 사용자 읽기 실행 권한 있음.

이는 비트로 표현되기 때문에 r = 4, w = 2, x = 1, -(권한 없음) = 0이다.

타입의 종류는 다음과 같다

- : 파일
d : 디렉토리
| : 다른 파일을 가리키는 링크
p : pipe/ 두 개의 프로그램을 연결하는 파이프 파일
b : block device/ 블럭 단위로 하드웨어와 반응하는 파일
c : character device/ 스트림 단위로 하드웨어와 반응하는 파일

 

디렉터리 구조의 종류에는 크게 5가지가 있다.

1. 1단계 디렉터리

가장 간단한 구조로, 모든 파일이 하나의 디렉터리 내에 위치해 관리되는 구조이다.
하지만 모든 파일이 하나의 디렉터리에 존재하기 때문에 각각의 파일 이름이 달라야하고, 파일이나 사용자의 수가 증가하면 파일을 관리하는데에 어려움이 생긴다. 파일명은 보통 내용과 관련되어있고, 시스템에 따라 길이에 제한을 받는다.

2. 2단계 디렉터리

2단계 디렉터리 구조에서 루트는 마스터 파일 디렉터리(MFD)이고, 아래로 사용자 파일 디렉터리(UFD), 그 아래로 파일이 있다. 여기서 파일은 트리의 리프에 해당한다.

사용자 이름과 파일 이름은 루트 디렉터리로부터 리프까지의 경로로 정의되는데, 이를 경로명이라 한다. 원하는 파일의 경로명을 알아야 해당 파일을 지정할 수 있다.

마스터 파일 디렉터리는 각 사용자 이름, 계정 번호, 사용자 파일 디렉터리를 가리키는 포인터를 갖고 있으며, 사용자 파일 디렉터리를 관리한다.

사용자 파일 디렉터리는 한 사용자가 갖고 있는 파일들에 대한 정보를 가지고 있고, 해당 사용자의 파일을 관리한다.

두 파일이 서로 다른 사용자 파일 디럭터리에 속하는 경우, 동일한 파일 이름을 사용할 수 있다.

3. 트리 구조 디렉터리

말 그대로 트리의 형태를 띄는 디렉터리 구조다.

하나의 루트 디렉터리와 여러 개의 서브 디렉터리로 구성되어있다.

각 디렉터리에는 파일과 서브 디렉터리가 존재한다. 우리가 흔히 사용하는 폴더 안에 폴더나 파일이 들어있는것을 생각하면 이해가 편하다.

트리 구조 디렉터리는 디렉터리의 생성과 제거가 비교적 용이하다.

디렉터리 탐색은 포인터를 이용하고, 경로명은 절대 경로명상대 경로명이 있다.

절대 경로명은 루트에서부터 가리킨 파일까지 모든 경로를 지정하는것이고, 상대 경로명은 현재 디렉터리의 위치를 기준으로 목적하는 파일까지의 경로를 지정하는것이다.

4. 비순환 그래프 디렉터리

트리 구조 디렉터리를 확장한것이다.

트리 구조 디렉터리에서는 디렉터리간 파일이나 서브 디렉터리의 공유를 금지한 반면, 비순환 그래프 디렉터리에서는 디렉터리간에 파일이나 서브 디렉터리의 공유가 가능하다. 이는 한 폴더에 다른 폴더에 있는 파일이나 폴더의 바로가기를 생성한것을 생각하면 이해가 편하다.

여기서 일어나는 공유는 복사의 개념이 아니다. 한 디렉터리에서 공유한 파일이나 폴더에 수정이 일어나면 다른 디렉터리에서도 해당 파일이나 디렉터리의 변화를 볼 수 있다.

디렉터리 구조가 복잡하고, 공유된 하나의 파일에 대해 두번 이상 탐색될 수 있기 떄문에 시스템 성능이 저하될 수 있다.

그리고 한 디렉터리에서 공유된 파일을 삭제할 경우, 고아 포인터가 발생하는데, 이는 바로가기를 눌렀을 때 해당 파일이 없다는 문구가 뜨는것을 생각하면 이해가 쉽다. 

5. 일반 그래프 디렉터리

트리 구조에 링크를 더해 순환을 허용하는 그래프 구조이다.

디렉터리와 파일 공유에 대해 융통성이 있고, 탐색 알고리즘이 간단해 파일과 디렉터리에 대한 엑세스가 쉽다.

일반 그래프 디렉터리는 마지막 참조가 끝났음에도 메모리를 재할당 할 수 있는지 결정하는 쓰레기 수집(Garbage Collection)이 필요하다. 쓰레기 수집은 전 파일 시스템을 탐색해 엑세스할 수 있는 파일에 표시하고, 두번째 탐색에서는 표시하지 않은 메모리를 사용 가능 메모리 리스트에 추가하는 것이다.

'운영체제' 카테고리의 다른 글

[운영체제 공부] 제어 비트  (0) 2020.03.03
[운영체제 공부] RAID  (0) 2020.03.02
[운영체제 공부] 입출력 모듈  (0) 2020.03.02
[운영체제 공부] 가상 메모리  (0) 2020.02.27
[운영체제 공부] 세그먼테이션  (0) 2020.02.25

RAID(Redundant Array of Independent Disks)란 운영체제로 여러대의 물리적 디스크를 하나의 논리적 디스크로 인식하는 기술이다.

RAID 방법은 6계층으로 분류되며, 주로 사용되는 방식은 RAID 0, RAID1, RAID10 등이 있다.

 

RAID 0 (Striping 스트라이핑)

RAID 0은 여러 개의 하드디스크를 병렬로 배치해 하나의 디스크처럼 사용한다. 일련의 데이터를 이 디스크들에 일정한 크기로 나누어 분산 저장하는 방법이다. 그러나 RAID 0은 모든 디스크에 각 파일의 내용을 분산시키기 떄문에 하나의 디스크에 문제가 생기면 전체 파일이 손실된다. RAID 0의 장점은 여러 파일에 대한 읽기 및 쓰기 작업 처리량이 디스크 수를 곱한것만큼 빨라지는것이다.

RAID 1 (Mirroring 미러링)

RAID 1은 RAID 0처럼 데이터 스트라이핑을 사용하면서 배열 내의 모든 디스크에 동일한 데이터가 있는 미러 디스크를 가진다. 중복 저장된 데이터가 적어도 2개가 있는 드라이브로 구성된다. 읽기 요구는 요구 데이터가 있는 디스크 2개 중 어떤 디스크에서든 서비스 받을 수 있기 떄문에 성능이 향상될 수 있다. RAID 1은 드라이브에 장애가 발생하거나 데이터 손실이 발생해도 나머지 디스크로 액세스 가능하기떄문에 안정성이 높다. 그러나 디스크공간이 두 배 필요하다.

RAID 10 (1+0)

RAID 1로 미러링후, RAID 0으로 스트라이핑 한다.

RAID 0과 RAID 1을 응용한 방식으로, 디스크가 불량이 나면 미러링으로 묶인 하드를 통하여 손실된 데이터만 복원이 가능하다. 이 방법은 규모가 큰 DB영역을 다룰때 사용된다.

입출력 모듈(I/O Module)은 컴퓨터 시스템과 입출력 또는 주변장치(스캐너, 프린터 등)를 연결하는 역할을 수행한다.

입출력 모듈은 다음과 같은 기능들을 제공한다.

프로세서 통신 이 기능에는 주로 프로세서에서 전송한 명령 해독, 프로세서와 입출력 모듈 간의 데이터 교환, 현재 상태 보고, 마지막으로 묘듈에 연결된 여러 장치를 구분할 주소 인식 기능이 있다.  
디바이스 통신 상태 보고와 같은 장치간 통신을 지원한다.
제어/타이밍 기능 컴퓨터 내부 자원과 연결된 외부 장치 간의 데이터 흐름을 관리한다.
데이터 버퍼링 프로세서와 메모리 및 주변장치간의 데이터 전송 속도 차이를 관리하는 기능이다.
오류 검출 기계식 오류(용지 걸림) 또는 데이터 기반 오류를 감지하고 이를 프로세서에 보고한다.

 

'운영체제' 카테고리의 다른 글

[운영체제 공부] 디렉터리 구조  (0) 2020.03.03
[운영체제 공부] RAID  (0) 2020.03.02
[운영체제 공부] 가상 메모리  (0) 2020.02.27
[운영체제 공부] 세그먼테이션  (0) 2020.02.25
[운영체제 공부] 페이징  (0) 2020.02.24

+ Recent posts