[리눅스와 하드웨어]하드웨어와 아키텍쳐
출처 : 대전국제IT교육센터 정성재 강사
1. 기본적인 시스템 하드웨어
설정
(1) 바이오스 : PC에 설치된 펌웨어를 보통 기본 입출력 시스템(BIOS, Basic
Input/Output System)
또는 바이오스라 부르며 시스템이 시작된 후 운영체제가 시작될 때까지 각
장치를 점검
한다. BIOS프로그램은 보통 ROM에 저장되어 있어 ROM-BIOS라고도 부른다. 시스템에
따라 차이는 있지만 이 과정에는 시스템의 초기화, 메모리 및 기타장치 의 테스트,
저장 장치에서 운영체제를 읽어들이는 것등이 포함된다. 또한 낮은 수준의 시스템
설정 인터페이스를 제공하며 사용자로 하여금 부팅시에 이들을 설정할 수 있게 하며
자원을 할당한다. 보통
디스크설정, 메모리 설정, 보드에서 제공하는 포트(시리얼/
패러럴등), 시계, 부트 장치 등을 설정할 수
있다.
(2) 자원 할당 : 바이오스 설정 중에서 몇몇 세부 사항에는 인터럽트(IRQ), I/O주소, DMA(Direct
Memory Access)채널 등의 시스템 자원이 포함되어 있다.
1) 포트 : 리눅스에서는 표준
직렬(Serial), 병렬(Parrarel), 조이스틱포트 모두 지원한다. 또한
이러한 포트들과 주변기기는
/dev디렉토리에서 파일로 관리된다. 직렬포트는 ttyS0,
ttyS1..등의 이름으로 사용되어 /dev디렉토리에서는
/dev/ttyS0, /dev/ttyS1등으로
존재하고 마찬가지로 패러럴포트는 lp0,lp1..의 이름으로 사용되어
/dev/lp0, /dev/lp1
등으로 존재한다.
ㄱ. 직렬포트 : CPU는 직렬포트로 들어온 데이터를
처리하기 위해서 그 데이터가 어디에서 온
것이며, 어떤 신호를 사용되어 CPU가 데이터를 처리하도록
요청하엿는가를 알고
있어야 하는데 그 정보를 나타내는 값이 I/O주소(I/O ports)와
IRQ(Interrupt
ReQuest)로 직렬 포트 장치들은 이 값들을 메모리에 저장해 두어야 한다.
일반
적인 ISA버스에는 IRQ0~IRQ15까지 총 16개의 IRQ가 있다.
ㄴ. 직렬포트
IRQ와 주소
포트 리눅스장치파일 IRQ 기능
I/O주소
COM1 /dev/ttyS0 4 마우스
0x3f8
COM2 /dev/ttyS1 3 플로터/외장모뎀
0x2f8
COM3 /dev/ttyS2 4 사용안함(마우스와 충돌)
0x3e8
COM4 /dev/ttyS3 3 내장모뎀
0x2e8
2) 인터럽트 : PC 마이크로 프로세서에게 전달되는 전기적 신호로 현재 작업을 잠시 멈추고
비동
기적 이벤트(예를 들면 키보드 누름)에 반응하도록 한다. 최근의 PC장치들은
인터럽
트를 공유할 수 있으나 구형 하드웨어는 다른 장치와 충돌하지 않도록 직접
고유값으
로 지정해야 한다. 보통 IRQ(Interrupt ReQuest)라 부른다.
ㄱ. IRQ
목록
IRQ 기능
IRQ0 System
timer
IRQ1 Keyboard controller
IRQ2
공유
IRQ3 COM2/COM4
IRQ4 COM1/COM3
IRQ5 LPT2/SOUND CARD
IRQ6 Floppy Drive
Controller
IRQ7 LPT1 parallel Port
IRQ8
Real-Time Clock(TTC)
IRQ9 예비(주로 미디카드에서 사용)
IRQ10 Lan Card
IRQ11 SCSI Adapter
IRQ12
PS/2 Mouse
IRQ13 Coprocessor
IRQ14 IDE
Controller(Primary)
IRQ15 IDE Controller(Secondary)
ㄴ.
관련파일 : /proc/interrupts => 현재 사용중인 IRQ를 알 수 있다. 병렬포트에 대한
내용은
없다.
예)
[posein@www posein]$ cat /proc/interrupts
CPU0
0: 51736181 XT-PIC timer
1: 5 XT-PIC
keyboard
2: 0 XT-PIC cascade
5:
260033 XT-PIC usb-uhci, usb-uhci, usb-uhci, eth1
8: 1 XT-PIC rtc
12: 2979673 XT-PIC
eth0
14: 131256 XT-PIC ide0
15:
2 XT-PIC ide1
NMI: 0
LOC:
0
ERR: 0
3) I/O주소 : 마이크로 프로세서의 메모리 맵(메모리 번지를 정의한 목록)에
위치하며 네트워크
인터페이스와 같은 입출력 장치를 위해 예약되어 있다. 마이크로 프로세서는
메모리에
데이터를 기록하는 방법과 동일하게 장치에 데이터를 기록할 수 있고, 이것은 장치
인터 페이스를 간단하게 할 수 있다. 만일 여러 장치들이 우연히 동일한
I/O주소를
공유하게 되면 시스템 충돌이 일어난다.
ㄱ. 표준 I/O 주소
060h + 064h Keyboard Controller
170h + 376h Secondary IDE
Controller
1F0h + 3F6h Primary IDE Controller
220h Sound Card
300h Lan Card
330h SCSI Adapter
3F2h Floppy Drive
Controller
3F8h COM1
2F8h
COM2
3E8h COM3
2E8h COM4
378h LPT1
278h LPT2
ㄴ. 관련파일 :
/proc/ioports => 현재 사용중인 I/O 주소에 대한 정보를 알 수 있다.
ㄷ. 관련 명령 : setserial
명령어를 이용하여 직렬포트를 확인할 수 있다.
[root@www /root]# setserial -g
/dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
.....
4) DMA :
몇몇 장치들이 DMA채널을 이용해 메모리에 직접 작업하고 마이크로 프로세서는 다른
작업할 수 있게 해준다. 만일
DMA가 없을 경우 모든 데이터는 장치들의 포트를 통해
읽어서 메모리에 저장해야 되며 이 마이크로 프로세서에 의해
수행된다. DMA를 지원하는
장치들은 마이크로 프로세서가 작업중일 때 메모리에 직접 접근해서 필요한 데이터를
기록하게 된다. 이것을 결과적으로 성능을 향상시키는 역할을 한다.
ㄱ. 관련파일 : /proc/dma
=> dma의 값을 알 수 있다.
(3) 1024 실린더 제한 : 대부분의 PC운영에서 바이오스는 마스터 부트 레코드(MBR)이라고
알려진
디스크의 시작부분에서 운영체제를 불러온다. 윈도우즈 운영체제
사용자들은
부트 레코드가 다른 곳에 설치되지 않으므로 MBR에 대해 별로 신경을
쓰지
않는다. 그러나 리눅스의 경우 사용자가 부트로더(LILO)를 MBR이나
루트
파티션에 설치할 수 있다. 이러한 유연성 때문에 종종 바이오스와 LILO가
부팅에 실패하는 경우가 생긴다. 이 문제는 바이오스가 우선 LILO를
메모리
로 로드한 뒤 실행해야 하지만 바이오스는 1024 실린더 이후의 디스크
영역
에는 접근할 수 없기 때문이다. 만일 바이오스가 전체 LILO를 읽을 수
없다면
부팅에 실패하게 된다. 또한 구 버전의 LILO는 비슷한 이유로 커널
이미지를
반드시 1024 실린더 안쪽에 위치시켜야만 한다.
2. SCSI와 NIC 장치 설정
(1) 네트워크 인터페이스 카드
1) 네트워크 카드의 시대적
분류
ㄱ. 점퍼시대 : 이 방식의 하드웨어는 점퍼 위치를 변경함으로써 설정할 수 있도록 만들었다.
이
러한 방식은 점퍼 설정에 필요한 관련문서를 참고해 PC를 열어 내부에 접근해야
한다.
ㄴ. 비휘발성 메모리시대 : 이 방법도 여전히 수동으로 설정한다. 점퍼를 제거하고
비휘발성 메모
리에 저장하는 방식이다. 물리적으로 접근해야 하는 문제는 없어
졌지만
제조사에서 제공되는 프로그램을 이용해야 한다. 이러한 프로그램은
대부분 MS-DOS용으로 만들어져 리눅스에서 이 장치를 사용하기
위해서는
초기 설정을 위한 별도의 MS-DOS시스템이 필요하다.
ㄷ. 현재 :
최근 PCI 버스 방식의 네트워크 카드들은 대부분 자동으로 설정된다. 운영체제가
시작되기 전에 시스템 초기화
단계에서 설정한다. 이러한 자동화는 수동으로 설정하는
불편함과 장치 충돌을 방지한다.
2) /proc
파일시스템 이용
운영중인 리눅스 시스템에 새로운 하드웨어를 추가할 경우 기존의 장치들이 사용하는 리소스를
확인할
필요가 있는데 이러한 커널의 상태 정보는 /proc에 저장된다. interrupt, dma, ioports
등의 파일들은 현재
사용중인 자원을 보여준다.
예) 1. /proc/interrupts
2.
/proc/dma
3. /proc/ioports
3.
기타관련명령어
(1) lspci
1) 설명: 시스템에 사용되는 PCI관련 정보를 출력해주는
명령어이다.
2) 사용법
lspci [options]
3) options
-v : 정보를
자세히 출력해준다.
4) 사용예
[root@mybestone /root]# lspci
00:00.0
Host bridge: VIA Technologies, Inc.: Unknown device 3128 (rev 01)
00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP]
00:08.0 VGA compatible controller: ATI Technologies Inc 3D Rage II+ 215GTB
[Mach64 GTB] (rev 9a)
00:0a.0 Ethernet controller: Realtek Semiconductor
Co., Ltd. RTL-8139 (rev 10)
00:0b.0 Ethernet controller: Realtek
Semiconductor Co., Ltd. RTL-8139 (rev 10)
00:11.0 ISA bridge: VIA
Technologies, Inc. VT8233 PCI to ISA Bridge
00:11.1 IDE interface: VIA
Technologies, Inc. Bus Master IDE (rev 06)
00:11.2 USB Controller: VIA
Technologies, Inc. UHCI USB (rev 1b)
00:11.3 USB Controller: VIA
Technologies, Inc. UHCI USB (rev 1b)
00:11.4 USB Controller: VIA
Technologies, Inc. UHCI USB (rev 1b)
00:11.5 Multimedia audio
controller: VIA Technologies, Inc. AC97 Audio Controller (rev 30)