- 데이터의 두 값 비교 시 사용. ‘cmp a, b’의 경우 a에서 b를 뺀 값이 0이면 참
- 제 1피연산자 - 제 2피연산자 결과가 0이면 T, 1이면 F
형식
CMP
[제1피연산자]
[제2피연산자]
사용 예
CMP
AL
4
AL이 원래 7이었다면, 명령 실행 후에는 3이 되고 0이 아니므로 거짓이 됨
• 기타 산술 연산 명령
명령
설명
ADC
ADd with Carry
캐리를 포함한 덧셈 수행
SBB
SuBtraction with Borrow
캐리를 포함한 뺄셈 수행
DEC
DECrement
피연산자 내용을 1 감소 시킴
NEG
Change Sign
피연산자 2의 보수로 부호를 반전
INC
INCrement
피연산자 내용을 1 증가 시킴
AAA
ASCII Adjust for Add
덧셈 결과의 AL 값을 UNPACK 10진수로 보정
DAA
Decimal Adjust for Add
덧셈 결과의 AL 값을 PACK 10진수로 보정
AAS
ASCII Adjust For Subtact
뺄셈 결과의 AL 값을 UNPACK 10진수로 보정
DAS
Decimal Adjust for Subtract
뺼셈 결과의 AL 값을 PACK 10진수로 보정
MUL
MUltipLy (Unsigned)
AX와 피연산자의 곱셈 결과를 AX 또는 DX:AX에 저장
IMUL
Integer MULtiply (Signed)
부호화된 곱셈 수행
AAM
ASCII Adjust for Multiply
곱셈 결과의 AX 값을 UNPACK 10진수로 보정
DIV
DIVide (Unsigned)
AX 또는 DX:AX 내용을 피연산자로 나누고, 몫은 AL 또는 AX에 저장한 다음 나머지는 AH 또는 DX에 저장
IDIV
Integer DIVide (Signed)
부호화된 나눗셈 수행
AAD
ASCII Adjust for Divide
나눗셈 결과 AX 값을 UNPACK 10진수로 보정
CBW
Convert Byte to Word
AL의 바이트 데이터를 부호 비트를 포함해 AX 워드로 확장
CWD
Convert Word to Double word
AX 워드 데이터를 부호를 포함해 DX:AX의 더블 워드로 변환
데이터 전송 명령
- 메모리, 범용 레지스터, 세그먼트 레지스터로 참조되는 주소에 존재하는 데이터 전송
• MOV(Move): 데이터 이동할 때 사용
- BP의 현재 값이 0x10000004라면, BP+8은 0x1000000C
- 0x1000000C 번지에 저장되어 있는 값이 1024므로 AX에는 1024가 입력
형식
MOV
[제1피연산자]
[제2피연산자]
사용 예
MOV
AX
[BP+8]
BP의 주소에 8 더한 주소에 있는 데이터 값을 AX에 대입함
MOV 명령을 실행할 때 스택 동작
• PUSH(Push): 스택에 데이터를 삽입할 때 사용
- 아래 그림과 같이 스택은 커지고, 스택 포인터(Stack Pointer)는 데이터 크기만큼 감소
형식
PUSH
[제1피연산자]
PUSH 명령을 실행할 때 스택 동작
• POP(Pop): 스택에서 데이터 삭제할 때 사용. 스택에서 삭제된 명령은 함수의 반환 값으로 받아 사용도 가능
- 아래 그림과 같이 스택 포인터는 삭제하는 데이터 크기만큼 증가
형식
POP
[제1피연산자]
POP 명령을 실행할 때 스택 동작
• LEA(Load effective address to register)
- 데이터의 값을 이동할 때 사용
- MOV 명령과 LEA 명령에서 제1피연산자는 데이터 이동의 목적지인 것은 같지만, 제2피연산자에 대한 추가 연산의 처리 방식은 다름
- 제2피연산자에‘BP+4’가 있을 경우 MOV 명령은 ‘BP+4’를 하나의 주소 값으로 처리
- LEA 명령은 ‘BP’만 주소 값으로 인식하고 ‘+4’는BP 주소 값에 대한 추가 연산으로 처리
- MOV는 BP+4가 주소가 되지만, LEA는 주소가 BP가 되고 BP에 들어있는 값에 +4가 됨
형식
LEA
[제1피연산자]
[제2피연산자]
사용 예
LEA
AX
[BP+4]
BP의 현재 값이 0x10000004라면, MOV 명령처럼 BP+4인 0x10000008의 주소 값을 가져오는 것이 아닌 0x10000004의 주소에 있는 값에 4를 더해 AX에 대입
LEA 명령을 실행할 때 스택 동작
- 0×10000004 번지에 저장되어 있는 값은 46 0×10000008은 AX가 가리키는 번지
• 기타 데이터 전송 명령
명령
설명
XCHG
Exchange Register / Memory with Register
첫 번째 피연산자와 두 번째 피연산자를 바꿈
IN
Input from AL / AX to Fixed port
피연산자로 지시한 포트로 AX에 데이터를 입력
OUT
Output from AL / AX to Fixed port
피연산자가 지시한 포트로 AX의 데이터 출력
XLAT
Translate byte to AL
BX:AL이 지시한 테이블 내용을 AL로 로드
LES
Load Pointer to ES
LEA 명령과 유사한 방식으로 다른 ES 데이터의 주소 내용을 참조할 때 사용
LAHF
Load AH with Flags
플래그 내용을 AH의 특정 비트로 로드
SAHF
Store AH into Flags
AH의 특정 비트를 플래그 레지스터로 전송
PUSHF
Push Flags
플래그 레지스터 내용을 스택에 삽입
POPF
Pop Flags
스택에 저장된 플래그 레지스터 값 삭제
논리 명령
- 연산부호가 논리연산을 지정하는 명령으로 자리옮김, 논리 합(OR), 논리곱(AND), 기호 변환 등이 있다
• AND(And): 대응되는 비트가 둘 다 1일 때만 결과가 1 이고, 그 이외는 모두 0
형식
AND
[제1피연산자]
[제2피연산자]
사용 예
AND
AX
10h
AX 값이 0x08h일 때, 이를 2진수로 표현하면 1000이 됨 0x10h는 1010이므로 명령을 수행한 후 AX 값은 1000이 됨
• OR(Or): 대응되는 비트 중 하나만 1이어도 결과가 1이고, 둘 다 0인 경우에만 0
형식
OR
[제1피연산자]
[제2피연산자]
사용 예
OR
AX
10h
AX 값이 0x08h일 때, 이를 2진수로 표현하면 1000이 됨 0x10h는1010이므로 명령을 수행한 후 AX 값은 1010이 됨
• XOR(Exclusive Or): 대응되는 비트 중에서 한 비트가 1이고 다른 비트가 0이면 1, 두 개의 비트가 모두 0 또는 1일 때 0
형식
XOR
[제1피연산자]
[제2피연산자]
사용 예
XOR
AX
10h
AX 값이 0x08h일 때, 이를 2진수로 표현하면 1000이됨 0x10h는 1010이므로 명령을 수행한 후 AX 값은 0010이됨
• NOT(Invert): 피연산자의 1의 보수를 구하는 작동 코드로, 각 비트를 반전
형식
NOT
[제1피연산자]
사용 예
NOT
AX
AX 값이 0x08h라면 이를 이진수로 표현하면 1000이됨 명령을 수행한 뒤에 AX 값은 0111이됨
• Test(And function to flags, no result): 데이터의 두 값 비교할 때 사용, 데이터의 변경 없이 단순 비교
형식
TEST
[제1피연산자]
[제2피연산자]
사용 예
TEST
AL
10h
두 데이터가 같으면 ZF(Zero flag) 세트 같지 않으면 ZF는 클리어
• 기타 논리 명령
명령
설명
SHL / SAL
Shift Left / Shift Arithmetic Left
왼쪽으로 피연산자만큼 자리옮김(이동)
SHR / SAR
Shift Right / Shift Arithmetic Right
오른쪽으로 피연산자만큼 자리옮김(이동)
ROL
Rotate Left
왼쪽으로 피연산자만큼 회전 이동
ROR
Rotate Right
오른쪽으로 피연산자만큼 회전 이동
RCL
Rotate through Carry Left
자리 올림(Carry)을 포함 왼쪽으로 피연산자만큼 회전 이동
RCP
Rotate through Carry Right
자리 올림(Carry)을 포함 오른쪽으로 피연산자만큼 회전 이동
스트링 명령
- 바이트로 구성된 스트링(strings of bytes)을 메모리 내에서 전송
• REP(Repeat)
- ADD나 MOVS와 같은 작동 코드의 앞에 위치
- CX가 0이 될 때까지 뒤에 오는 스트링 명령 반복
• MOVS(Move String)
- 바이트나 워드, 더블워드 옮기는 명령 - MOVSB, MOVSW, MOVSD
형식
MOVSB
사용 예
LEA SI, String_1
LEA DI, String_2
MOV CX, 384
REP MOVSB
LEA SI, String_1 : String 1의 주소 값을 SI (Source Index)에 저장 LEA DI, String_2 : String 2의 주소 값을 DI (Destination Index)에 저장 MOV CX, 384 : CX에 384를 저장 REP MOVSB : SI에서 DI까지 CX가 0이 될 때까지 1바이트씩 복사
• 기타 스트링 명령
명령
설명
CMPS
CoMPare String
DS:SI와 ES:DI 내용을 비교한 결과에 따라 플래그 설정
SCAS
SCAn String
AL 또는 AX와 ES:DI가 지시한 메모리 내용을 비교한 결과에 따라 플래그 설정
LODS
LOaD String
SI 내용을 AL 또는 AX로 로드
STOS
STOre String
AL 또는 AX를 ES:DI가 지시하는 메모리에 저장
제어 전송 명령
- 점프(분기, Jump), 조건 점프(조건 분기, Conditional jump), 루프(Loop), 호출(Call)과 리턴(Return) 연산 등으로 프로그램의 흐름 제어
•JMP(Unconditional Jump)
- 대표적인 점프 명령 프로그램을 실행할 주소 또는 라벨로 이동
형식
JMP [제1피연산자]
사용 예
JMP 100h
주소로 직접 지정한 100h번지로 점프함
String: MOV CX, 384
...
JMP String
라벨로 JMP를 지정하는 경우
•조건부 점프 명령
명령
점프 조건
설명
JC
Carry Flag Set
CF = 1
CF 값이 1이면 점프
JNC
Not Carry Flag Set
CF = 0
CF 값이 0이면 점프
JE / JZ
Equal / Zero
ZF = 1
결과가 0이면 점프
JA / JNBE
above / Not below Not Equal
CF = 0 and ZF = 0
결과가 크면 점프 (부호화되지 않은 수)
JAE / JNB
above Or Equal / Not below
CF = 0
결과가 크거나 같으면 점프 (부호화되지 않은 수)
JB / JNAE
below / Not above Nor below
CF = 1
결과가 작으면 점프 (부호화되지 않은 수)
JL / JNGE
Less / Not Greater Nor Equal
SF != OF
결과가 작으면 점프 (부호화된 수)
JBE / JNA
below Or Equal / Not above
(CF or ZF) = 1
결과가 작거나 같으면 점프 (부호화되지 않은 수)
JG / JNLE
Greater / Not Less Nor Equal
ZF = 0 and SF = OF
결과가 크면 점프 (부호화되지 않은 수)
JGE / JNL
Greater Or Equal / Not Less
SF = OF
결과가 크거나 같으면 점프 (부호화된 수)
JLE / JNG
Less Or Eqal / Not Greater
ZF = 1 or SF != OF
결과가 작거나 같으면 점프 (부호화되지 않은 수)
JNE / JNZ
Not Equal / Not Zero
ZF = 0
결과가 0이 아니면 점프
JNO
Not Overflow
OF = 0
오버플로가 아니면 점프
JNP / JPO
Not Parity / Parity Odd
PF = 0
PF가 1이면 점프
JNS
Not sign
SF = 0
SF가 1이면 점프
JO
Overflow
OF = 1
오버플로 발생 시 점프
JP / JPE
Parity / Parity Even
PF = 1
PF가 1이면 점프
JS
Sign
SF = 1
SF가 1이면 점프
JCXZ
CX Zero
CX = 0
CX가 0이면 점프
- above, below : 부호 없는 두 수의 크기 관계
- greater, less : 부호 있는 두 수의 크기 관계
• CALL(Call)
- JMP처럼 함수 호출할 때 사용, 제1피연산자에 라벨을 지정
• RET(Return from CALL)
- 함수에서 호출한 곳으로 돌아갈 때 사용하는 명령 ‘POP EIP’와 같은 의미
(1)CALLSUBR
(4)ADDAX,10 .... (2) SUBR :INCAX .... (3)RET
- AX에는 09 값이 저장되어 있다 가정
- (1) SUBR 함수 호출하면, (2) SUBR 라벨이 있는 곳에서 RET까지 실행
- INC AX가 있으므로 AX는 10이 됨
- (3) RET 명령이 실행되면 CALL 다음 라인인 (4) ADD AX, 10’ 실행, AX는 20
• LOOP(Loop CX times)
- 문장들의 블록을 지정된 횟수만큼 반복
- CX는 자동적으로 카운터로 사용되며 루프 반복할 때마다 감소
형식
LOOP [제1피연산자]
사용 예
MOV AX, 0
주소로 직접 지정한 100h번지로 점프함
MOV CX, 6
L1: INC AX
LOOP L1
제1피연산자는 라벨이 됨 위 예시에서 L1이 CX 숫자만큼 다섯 번 회전하므로 결과적으로 AX는 5가 됨
- 사용자가 컴퓨터 시스템을 손쉽게 사용하도록 하고, 시스템 자원(기억 장치, CPU, 입출력 장치, 정보, 네트워크 등)을 효율적으로 관리할 수 있도록 하는 프로그램 집합
운영체제의 역할
•운영체제의 기능
- 일반 PC는 단일 사용자 운영체제 구성 모델을 기반으로 하여 메모리 관리자, 프로세서 관리자, 장치 관리자, 파일 관리자 등 서브 시스템 관리자로 구성
단일 사용자 운영체제 구성 모델
•사용자 명령 인터페이스
- 사용자와 시스템 간의 대화 수단(DOS, GUI)
서브 시스템 관리자
•메모리 관리자
- 프로그램의 메모리 요청의 적합성 점검
- 적합한 경우 할당된 메모리를 다른 프로그램이 접근하지 못하게 관리
- 보호 프로그램 종료 시 할당된 메모리를 회수
•프로세서 관리자
- 명령어들이 체계적이고 효율적으로 실행되도록 작업 스케줄링 - 사용자의 작업 요청 수용 또는 거부
•장치 관리자
- 프린터, 디스크 드라이버, 모뎀, 모니터 등, 시스템 내의 모든 장치(Device)를 프로그램에 할당 또는 회수
•파일 관리자
- 사용자별로 파일 접근(Access) 권한을 부여 접근 권한에 따라 파일을 할당(Open)하고 해제(Close)
•네트워크 관리자
- CPU, 메모리, 프린터, 디스크 드라이버, 모뎀, 모니터 같은 자원을 관리
•Window의 역사
윈도우 발전 과정
•과거 MS 계열 운영체제
MS DOS 2.0, Windows NT
Windows Server 2012
•Window의 구조
- 커널은 인터럽트 (Interrupt) 처리, 프로세스 관리, 메모리 관리, 파일 시스템 관리, 프로그래밍 인터페이스 제공 등 운영체제의 기본 기능을 제공
- 윈도우 커널 구조
윈도우 링 구조윈도우 시스템 구조
• 커널 모드
- 기본적으로 사용자가 접근할 수 없는 영역
- 프로그램을 실행하는 기본 관리 시스템
• HAL(Hardware Abstraction Layer)
- 컴퓨터 하드웨어와 소프트웨어 사이의 추상화 계층
- 하드웨어 부품에 따라 해야 할 복잡한 과정을 일관성 있고, 간략한 인터페이스로 제공하기 위해 같은 류의 하드웨어를 공통 명령어 집합으로 묶음
- 소프트웨어와 하드웨어 사이에서 소프트웨어가 PC의 시스템 메모리, CPU, 또는 기타 하드웨어 장치에 직접적으로 접근하는 것을 막음
- 소프트웨어는 HAL을 통해 하드웨어의 종류에 관계없이 컴퓨터 자원을 사용하여 일관된 작업을 수행
• 마이크로 커널 - 커널은 프로세스의 스케쥴링이나 메모리 관리, 데이터 입출력, 하드웨어 제어 등을 수행 - 그러나 윈도우는 이 작업들을 여러 관리자에게 분담시키고, 마이크로 커널은 하드웨어와 하는 통신만 제어하는 최소한의 커널 - 소스코드 측면에서 10,000줄 이하의 코드를 지니는 경향이 있음
• 사용자 모드
- 사용자 모드에는 다양한 응용 프로그램이 있을 수 있고, 이러한 응용 프로그램을 실행하는 서브 시스템이 있음 이러한 서브시스템을 컨테이너(Container)라고도 함
- 윈도우 10부터 윈도우 리눅스 서브시스템(WSL, Windows Subsystem for Linux) 적용
- 윈도우에서 리눅스 OS 설치 및 실행 가능
• 윈도우 관리자의 역할
-입출력 관리자(I/O Manager) : 시스템의 입출력을 제어
-객체 관리자(Object Manager) : 파일, 포트, 프로세스, 스레드 등의 객체들에 대한 정보를 제공
-보안 참조 관리자(Security Reference Monitor Manager) : 각 데이터나 시스템 자원의 제어를 허가 하거나 거부함
-프로세스 관리자(Process Manager) : 스레드를 생성하고 요청에 따라 처리
- 로컬 프로시저 호출 관리자(Local Procedure Call Manager) : 프로세스 간 장치
- 가상 메모리 관리자(Virtual Memory Manager) : RAM의 메모리를 할당하고, 가상 메모리의 페이징 (Paging)을 제어
- 그래픽 장치 관리자(Graphics Device Interface Manager) : 화면에 선이나 곡선을 그리거나 폰트 등을 관리
- 기타 관리자 : 캐시(Cache) 관리자, PNP(Plug and Play) 관리자, 전원 관리자 등이 있다.
• 윈도우 부팅 순서 (윈도우 XP, 윈도우 서버200/2003)
1 | POST(Power On Self Test)의 실행
- BIOS(Basic Input/Output system)에서 POST(Power On Self Test) 실행
- 컴퓨터 전원 인가 시 BIOS가 주변장치에 이상은 없는지 검사
2 |기본 부팅 관련 설정사항 로드
- BIOS는 CMOS에 설정되어 있는 시스템 설정사항 및 부팅과 관련된 여러 가지 정보를 읽어 시스템에 적용
- CMOS(Complementary Metal-Oxide Semiconductor)
- CMOS는 비휘발성이기에 메인보드의 BIOS는 각종 설정 작업을 할 때 CMOS에 저장된 정보를 불러올 수 있음
3 |MBR(Master Boot Record, 마스터 부트 레코드) 로드
- MBR은 저장 매체의 첫 번째 섹터에 위치하는 512바이트의 영역으로, 부팅 매체에 대한 기본 파일 시스템 정보
- 부팅 가능한 파티션을 찾아 부팅 프로그램을 담고 있는 부트 섹터(Boot Sector) 호출
- ‘Missing operating system’은 운영체제가 설치되지 않았거나 CMOS에서 부팅 매체를 잘못 설정했을 때 확인
4 |NTLDR(NT Loader) 실행
- 하드 디스크의 부팅 파티션에 있는 프로그램으로, 윈도우 가 부팅될 수 있도록 파일 시스템을 실행하고 boot.ini 파일의 내용을 읽어 가능한 부팅 옵션을 보여줌
- 윈도우 비스타 이상 버전부터는 boot.ini를 포함하지 않고 별도의 시동 로더 사용
- 시스템에 설치된 하드웨어 검사(CPU 유형, 버스 유형, 비디오 보드 유형, 키보드와 마우스 종류, 컴퓨터에 장착되어 있는 직렬 포트와 병렬 포트, 플로피 드라이브)
- NTDETECT가 문제 없이 구동하면 레지스트리에 하드웨어 키 생성( HKEY_LOCAL_MACHINE, 재부팅마다 레지스트리에 해당 부분을 만들고 항상 현재 하드웨어 구성 반영)
5 |NTDETECT.com 실행
6 |ntoskrnl.exe(NT OS Kernel) 실행 HAL.DLL(Hardware Abstraction Layer) 로드 단계
- 커널 로드 : 시스템 설정을 로드하고, 이것을 HKEY_LOCAL_MACHINE\ System\CurrentControlset\Services에 저장
- 커널 초기화 : 드라이브에 대한 현재의 제어 설정을 검사하고 작업을 시작
- 서비스 로드 : 세션 관리자 서브 시스템(smss.exe)과 Win32 서브 시스템을 로드
- 서브 시스템 시작 : 윈도우 서브 시스템이 초기화, Win32 서브 시스템은로그인을 처리하고 Winlogon.exe를 시작
• 리눅스/유닉스의 역사
- 데니스 리치(Dennis Ritchie)는 파견지에서 돌아온 뒤 켄 톰슨(Ken Thomson)과 함께PDP- 7을 만들기 시작하며 멀틱스의 여러 개념 구현
1 | 파일 시스템 구성
2 | 사용자가 명령을 내려 바로 실행하는 명령어 인터프리터(command interpreter)
3 | 각 명령이 새로운 프로세스를 형성해서 실행하도록 하는 개념 모두 포함
PDP-7
- 버클리대학교 AT&T 연구소는 유닉스 소스 코드를 400달러에 구입
- 버클리대학교의 학생 빌 조이(Bill Joy)와 척 핼리(Chuck Haley)는 소스 코드를 수정하여 발전
- BSD(Berkeley Software Distribution)라는 이름을 붙여 당시50달러 가격으로 판매
-리눅스 시초는 1983년부터 리처드 스톨만이 개발한 GNU 운영체제
-리눅스 정식 버전은 1991년 10월에 발표 ‘Copy Left’ 원칙에 의해 배포했고, 해커를 포함한 여러 사람들에 의해 발전
-POSIX(Portable Operating System Interface)
-이식 가능 운영 체제 인터페이스
-서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 유닉스 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격
• 유닉스의 표준 인터페이스 POSIX
- POSIX.1(핵심부, 운영체제 인터페이스)
- POSIX.2(셸과 툴, 사용자 명령 등)
- POSIX.3(표준 규격의 적합성 검증법)
- POSIX.4(실시간 POSIX 확장)
- POSIX.5(Ada 언어)
- POSIX.6(보안 기능) 등
유닉스 시스템 발전 과정
리눅스/유닉스의 구조
• 유닉스 링 구조
- 하드웨어, 커널, 셸, 응용 프로그램으로 구성
유닉스 링 구조
- 윈도우보다 훨씬 단순한 구조
- 크게 파일 서브 시스템, 장치 드라이버, 프로세스 제어로 나뉘며, 커널의 파일 크기 또한 윈도우의 1/3 정도
유닉스 시스템 구조
- 프로세스 제어: 전체 프로세스 간 통신, 스케줄링, 메모리 관리 구현
- 장치 드라이버: 윈도우에서 처럼 하드웨어와 소프트웨어를 연결해주는 인터페이스 제공
- 파일 서브 시스템: 하드 디스크와 같은 저장 공간에 유닉스의 파일을 저장하고 읽는 역할
• 셸(Shell)
-응용 프로그램에서 명령을 받아 커널에 전송하는 역할, 사용자의 키보드 입력 인식 해당 프로그램을 수행
-본 셸(Bourne Shell), 콘 셸(Korn Shell), C 셸(C Shell)
• 셸의 주요 기능
-자체의 내장 명령어 제공
-입력/출력/오류의 방향 변경(redirection)
-와일드카드(wildcard)
-파이프라인
-조건부/무조건부 명령 열 작성
-서브 셸 생성
-백그라운드 처리(Background processing)
-셸 스크립트(프로그램) 작성
• 리눅스/유닉스의 파일 시스템
- 일반 파일 : 데이터 파일이나 실행
- 디렉터리 : 유닉스에서는 디렉터리도 파일에 해당, 디렉터리가 담고 있는 여러 파일과 하위 디렉터리 정보가 담겨 있음
- 특수 파일 : 프린터나 터미널, 테이프 드라이버 같은 물리적인 장치를 특수 파일을 통해 접근, 특수 파일은 /dev(device)에 있음
- 파이프 파일 : | 문자를 말하며, 2개의 명령을 연결 시 사용, 임시 파일이 생성 되었다가 명령 수행을 마치면 사라지는 것으로, 이 파일을 파이프 파일이라고 함
유닉스의 디렉터리 구조
디렉터리
내용
/bin
기본적으로 실행 가능한 파일을 담고 있음 echo, mv, copy, pwd, who 등
/etc
시스템의 환경 설정 및 주요 설정 파일을 담고 있음 passwd, hosts, xined.conf 등
/tmp
프로그램 실행 및 설치 시 생성되는 임시 파일을 담고 있음 이 디렉터리에 파일을 저장하면 재부팅 시 임의로 삭제될 수 있음
/lib
기본 프로그램의 모듈을 담고 있음
/boot
커널을 위한 프로그램 파일을 담고 있으며, 부팅할 때 읽혀 수행 됨
/dev
프린터나 터미널 같은 물리적인 장치를 다루기 위한 특수 파일을 담고 있음
/home
각 사용자의 작업 디렉터리를 담고 있음 각 계정으로 로그인할 때 이 디렉터리 밑에 자신의 작업 디렉터리가 시작 디렉터리가 됨
/usr
사용자가 직접 쓰는 파일을 담고 있다. 다른 디렉터리에 있는 파일이 똑같이 위치하고 있는 것이 많은데, 이는 링크되어 있는 것
/usr/lib
C언어나 포트란의 라이브러리를 담고 있음
/usr/include
C언어에 사용되는 헤더 파일을 담고 있음
• 리눅스/유닉스의 부팅 순서
- 1단계 : POST(Power On Self Test) 수행
- 2단계 : 기본 부팅 관련 설정사항 로드
- 3단계 : MBR(Master Boot Record, 마스터 부트 레코드) 로드
- 4단계 : 부트 로더(Boot Loader) 실행
1 | LILO(Linux Loader)와 GRUB(GRand Unified Bootloader, GNU 프로젝트의 부트 로더) 사용
2 | LILO는 /etc/lilo.conf에 설정사항 저장
3 | GRUB은 /etc/grub.conf (=/boot/grub/grub.conf)에 설정사항 저장
4 | 부트 로더를 실행하면 OS 커널 이미지를 메모리에 로드
▪ 5단계 : 실행 레벨에 따른 서비스 실행
- inittab 파일은 부팅할 기본 모드를 선택하여 그에 따른 환경을 제공하는 분기점
- initttab 파일 : 실행 레벨(Run Level), 기본이 실행 레벨 7
실행 레벨 0
시스템을 종료할 때 사용
실행 레벨 1
단일 사용자 모드(Single User Mode)로, 기본적으로 관리자 권한의 셸을 얻는다. 그러나 대부분 데몬이 실행되지 않으므로 기능은 제약되어 있다.