OS를 이제 막 배우기 시작했는데.. Interrupt에 대해서

ole2000의 이미지

사실 아직 인터럽트에 대해서 개념도 잘 안선상태입니다.

인터럽트에 종류가 여러가지가 있던데..

Clock interrupt, I/O interrupt는 어떤 경우인지 간단한 예를 들어주시면..

이해하기가 쉬울것 같은데.. 왜 발생하는지.. 뭐 등등..

설명 좀 부탁드립니다.

주문한 교재가 아직 도착안했는데 벌써 퀴즈를 본다고해서.. 이렇게 부탁드립니다.

정태영의 이미지

ole2000 wrote:
Clock interrupt, I/O interrupt는 어떤 경우인지 간단한 예를 들어주시면..

clock interrupt 는 하드웨어적으로 일정 시간마다 한 번씩 발생하는 인터럽트이고 I/O 는 말그대로 뭔가 입력되었을 때 발생하는 인터럽트 입니다... 키보드가 눌렸다거나... 뭐 그런 경우죠 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

ole2000의 이미지

제가 궁금한건 왜 일정시간마다 인터럽트가 발생해야하는가 입니다..

일정시간마다 지속적으로 인터럽트가 발생한다고 들었는데..

왜 그런지는 잘 몰라서요.. --;;

Be cool...

정태영의 이미지

ole2000 wrote:
제가 궁금한건 왜 일정시간마다 인터럽트가 발생해야하는가 입니다..

일정시간마다 지속적으로 인터럽트가 발생한다고 들었는데..

왜 그런지는 잘 몰라서요.. --;;

하드웨어를 그렇게 구성해뒀으니까요... 시스템 시간 정보 업데이트를 하는데도 필요하겠고, 스케쥴링을 하기 위해서도 필요하겠죠.

tick tick tick 하면서 시간가는 걸 재다가 이 태스크 에 할당된 시간을 다 썼다 싶으면 다음 태스크로 스위칭을 시도한다거나... 뭐 그런거죠

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

jongwooh의 이미지

ole2000 wrote:
제가 궁금한건 왜 일정시간마다 인터럽트가 발생해야하는가 입니다..

일정시간마다 지속적으로 인터럽트가 발생한다고 들었는데..

왜 그런지는 잘 몰라서요.. --;;

멀티태스킹 기능을 제공하는 OS에서는 비선점형 태스크 스위칭을 하기 위한 스케줄러가 내장되어 있습니다.

이 스케줄러들은 클럭 인터럽트에 의해 호출되고 그렇게 호출된 스케줄러는 프로세스 큐를 점검해서 다음 태스크 스위칭 시점까지 프로세스가 실행해야 할 프로세스를 결정합니다.

시간파악도 중요한 기능이긴 하지만 스케줄 관리가 클럭 인터럽트의 가장 큰 존재 의미입니다.

그러니까 단순 반복 작업만 하면서 실세계의 시간을 알아야 할 필요가 없는 싱글 태스킹 시스템은 클럭 인터럽트같은것을 만들지 않아도 됩니다.

you must know the power of dark side.

crimsoncream의 이미지

동어 반복이긴 하지만 조금 더 이해가 쉽게 표현해보면 os가 원래 발생하는 인터럽트를 받아서 처리하는게 아니라 os가 시간정보가 필요하기 때문에 인터럽트가 발생하도록 설정하고 이 인터럽트를 기반으로 일정단위(보통 milli second 죠?)의 시간정보를 유지하는 겁니다. 만약에 시간의 경과를 알필요없이 돌아가는 os를 설계했다면 프로세서의 타이머관련 feature들을 disable 시켜버리면 인터럽트 발생안합니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

kooya의 이미지

정태영 wrote:
ole2000 wrote:
제가 궁금한건 왜 일정시간마다 인터럽트가 발생해야하는가 입니다..

일정시간마다 지속적으로 인터럽트가 발생한다고 들었는데..

왜 그런지는 잘 몰라서요.. --;;

하드웨어를 그렇게 구성해뒀으니까요... 시스템 시간 정보 업데이트를 하는데도 필요하겠고, 스케쥴링을 하기 위해서도 필요하겠죠.

tick tick tick 하면서 시간가는 걸 재다가 이 태스크 에 할당된 시간을 다 썼다 싶으면 다음 태스크로 스위칭을 시도한다거나... 뭐 그런거죠

정태영님이 답변을 주셨는데 저도 덧 붙이겠습니다.

인터럽트라는 개념이 언제 생겼는지 몰라도(인터럽트라는 개념을 컴퓨터측면에서만 설명하겠습니다.) 컴퓨터를 최대한 활용하려는 취지에서 생겼을거라고 봅니다. 여기서 활용이라는 말은 비용을 최소화하자라는 개념으로 이해하셔도 됩니다.

언제인지 모르지만 컴퓨터연산을 펀치카드(맞는지 잘 모르겠습니다.)라는 것을 가지고 한 시기로 올라가보면 데이타를 입력하고 출력하는 시간에 비해서 CPU가 데이타 처리(들어온 자료처리)를 하는 시간은 굉장히 짧았다 합니다. 이후 이것을 사람이 직접 안하고 자동화 하는 시스템이 만들어졌고 이것을 모니터링 하는 프로그램이 만들어졌다 합니다.OS의 시초라고 말하는 사람도 있죠.

이후 주변장치에 비해 CPU의 속도가 점점 빨라지면서(좀 모호한 표현이네요.) CPU가 노는 일이 많아졌답니다. 그래서 그당시 엔지니어들은 CPU가 다른것도 할수있도록 만들었다합니다.( 이 당시 멀티 태스킹이란 개념이 생기지 않았을까 추측합니다. 그러면서 스케쥴링이라는 개념이 생기고 IO 인터럽트라는 개념이 생기지 않았을까 생각합니다.)

결과적으로 처음에 말씀하신 Clock interrupt와 I/O 인터럽트라는 개념은 커퓨터의 활용을 극대화하기 위해서 만든 개념입니다.

Clock interrupt는 일정시기마다 발생하는 인터럽트고
I/O는 일정시간마다 발생할수도 안할수도 있습니다.

멀티태스킹 스케쥴링을 하면서 한프로세스가 계속 CPU를 점유하고 있으면 문제가 될수도 있어 이것을 하드웨어적으로 일정 시간마다(동기적으로) 다른 프로세스로 바꿀수도 있지요.(컨텍스트 스위칭 표현도 쓰죠.) 말씀하신 Clock interrupt가 이런경우 사용될수도 있습니다.

I/O 인터럽트라는 I/O가 데이타를 주고 받는 시간이 좀 느리니까 알아서 입출력(?)하고 끝나면 CPU한테 알려주라 라는것으로 볼수 있습니다. 나중엔 이것도 모잘라서 DMA라는 개념이 생겼죠.

정리하면 인터럽트라는 개념은 필요하니까 만들어진것이고 그 필요는 컴퓨터를 최대한 활용하자는 취지에서 만들어졌을것입니다. 그리고 그 근본에는 최소한의 투자(돈!!!)이라는 개념이 있을겁니다. 더 밑바닥에는 잘먹고 잘살아보자라는 개념이 있지 않을까요?

---------------------------------------------------------------------

설명중에 정확히지 않은 부분이 많습니다. 읽어서 감만 잡아주시고 정확한건 책을 통해서 보셨으면 합니다.

제 게시물에 잘못된건 답변으로 바로 잡아주세요..!!!

greedy 알고리즘

잔디인형의 이미지

저는 마이컴 프로그래머인데 마이컴을 하다보니 인터럽트가 쉽게 와 닿더라구요.

OS 는 인터럽트만 이해하면 절반 정도는 끝나는것 같습니다.

제 아내가 안구 건조증이 있어서 2시간에 한번씩 눈약을 넣어야 하는데 언제나 하던 일을 잠시 멈추고 눈에 약 넣는 일을 해야 했습니다.

2시간 마다 한번씩 인터럽트를 발생해야 하지요.

안약 넣는 처리를 끝내고 다시 하던 일을 계속 합니다.

2시간을 확인하기 위해 시계가 필요하지요. 시계는 시스템 클럭이라 보시면 됩니다.

버튼 입력 같은 경우 전화가 오면 하던일 멈추고 전화 받는 정도의 인터럽트겠지요.

타이머 인터럽트는 주로 학교에서 수업 받을 때 수업 시간을 알리는 종소리를 연상해 보시면 좋을것 같네요.

하루 종일 한 과목만 붙들고 있을 수는 없잖아요.

두서 없이 말씀 드렸는데 제대로 된 설명인지 모르겠습니다.

익명 사용자의 이미지

제가 좀 더 보강 설명을 드리면..

원래 컴퓨터(프로세서)는 정해진 명령을 순차적으로 수행하는
것이 기본 동작입니다.. 그런데 언제 일어날 지 모르는 이벤트에
대응하는 동작이 필요할 수 있습니다.

예를 들어.. 열심히 음악을 연주하다가 어떤 버튼이 눌려지면
잠시 멈추고 물을 마시는 동작을 하고 끝나면 중단된 일을
다시 재개하는 것이죠..

이때 버튼이 눌리는 동작에 의해 인터럽트가 발생한다고
보면 됩니다.

일정 시간마다 발생하는 인터럽트를 시스템에서 채용하는 경우가
많은데 시간에 관계된 작업, 예를 들어 1초마다 무언가 표시해야
한다거나 10분에 한번씩 파일을 확인해야 한다거나 하는
경우에도 사용될 수 있고..

OS에서는 프로세스나 쓰레드의 스케쥴링등 시간과 관련된
작업을 실행시키는 이벤트로서 사용될 수 있습니다..

shji의 이미지

헉.. 로그인한후 오래 되면 자동 로그아웃되나요? 분명 로그인한 상태에서
쓰기 시작했던 것 같은데요.. 위에글요..^^

죠커의 이미지

스케쥴러 이외에도 운영체제를 만들 때 "인터럽트"를 이용하기 쉽다는 점도 있습니다.

현대적인 PC에서는 운영체제는 CPU의 커널 모드에서 작동하며 응용 프로그램은 CPU의 사용자 모드에서 실행이 됩니다. 이때 사용자 모드에서 커널 모드로 전환되는 가장 만만한 방법이 인터럽트입니다. 그래서 운영체제의 기본적인 서비스를 인터럽트의 형태로 만드는 경우가 많습니다.

ole2000의 이미지

와.. 답변주신 모든분들께 감사드립니다.

많은 도움이 되었습니다...^^

Be cool...

violino의 이미지

전 인터럽트를 제대로 공부해서 시작한 것이 아니라 일단 시작하고 나중에 공부해서 첨에 고생을 많이 했습니다.
제가 80년대에 썼던 8비트 컴퓨터의 z80 프로세서는 그다지 멀티타스킹을 하기 위한 것이 아니었는데에도 타이머 인터럽트가 있었습니다.
위에서 말한 클럭 인터럽트가 아마 타이머 인터럽트하고 같은 것이겠지요.
시스템 클럭은 여러가지 면에서 중요합니다.
통신 하드웨어를 다루어 보신 분들은 클럭이 없인 동기가 이루어질 수 없어서 하드웨어 단에서 통신 자체가 안되는 것을 아실겁니다.
그때 재미있는 실험을 통해 인터럽트를 익혔는데요. 바로 리셋 스위치입니다.
그 8비트 머신엔 리셋에 해당하는 인터럽트가 있더라구요.
리셋 스위치를 누르면 하드 리셋을 안하고 소프트 리셋을 하더라구요.
그 인터럽트 벡터를 시스템 디버깅 프로그램이 시작하는 번지로 바꾸어놓고 프로그램 실행 도중에 눌러서 뭐가 실행되고 있었나 보곤 했습니다.
(솔직히 이거 악용해서 상용 게임 프로그램 해킹하려고 했습니다. 흑흑. 머 20년도 지난 일이니 공소시효는..^^)
나중에 시리얼 통신을 하다보니 무언가 외부에서 시리얼 포트를 통해 시그널이 들어올때 인터럽트가 발생하는걸 경험할 수 있었습니다.
그리고 나서 마이크로프로세서 책을 보니깐 프로세서 자체가 이미 인터럽트 입력단을 하드웨어적으로 가지고 있었습니다.
재밌는건 친구 하나가 그걸 확인하기 위해서 프로세서의 인터럽트 핀 연결부위를 잠시 떼었다 붙였다고 합니다.
순간이니깐 0.1초정도밖에 안되는 시간이었죠.
그런데 그동안 소프트웨어 상에선 엄청난 양의 하드웨어 인터럽트가 발생해서 테스트 프로그램이 뻑가고 말았답니다.
즉, 한번 떼었다 붙인것 같았지만, 사람 손으로 하는거라 순간적으로 접촉부분에 스파크가 발생해서 수백만번의 인터럽트가 발생한거죠.
즉, 인터럽트는 하드웨어와 소프트웨어간의 연결고리 같은거라고 보시면 됩니다.
소프트웨어적으로 인터럽트가 발생하면 무슨 일을 하고 있든 간에 중단되고 인터럽트 핸들러를 호출되게 되어있습니다.
(인터럽트 여러개가 발생할 경우 우선순위 문제등이 있겠죠)
시간에 민감한 리얼타임쪽 일이나, 하드웨어 입출력 등등에서 필수적인 요소입니다.

vio:

shji의 이미지

CN wrote:
스케쥴러 이외에도 운영체제를 만들 때 "인터럽트"를 이용하기 쉽다는 점도 있습니다.

현대적인 PC에서는 운영체제는 CPU의 커널 모드에서 작동하며 응용 프로그램은 CPU의 사용자 모드에서 실행이 됩니다. 이때 사용자 모드에서 커널 모드로 전환되는 가장 만만한 방법이 인터럽트입니다. 그래서 운영체제의 기본적인 서비스를 인터럽트의 형태로 만드는 경우가 많습니다.

CN님께 질문있습니다..^^;

사용자 모드에서 커널 모드로 전환되는 데 사용하는 인터럽트는 소프트웨어 인터럽트를 말하는 것인가요? 아니라면 구지 인터럽트라는 이름이 붙는 것이 이상할 것도 같구요.. 제가 아는 소프트웨어 인터럽트는 BIOS 루틴인데요.. 이건 사실상 어드레스 대신에 인덱스로 호출하는 것이라 원래의 인터럽트의 의미와는 좀 다르다고 알고 있어서요..

그리고.. 말씀하신 방법이 운영체제 설계상의 일반적인 방법인가요? 아니면 인텔계열 PC의 특성인가요?

무식한 질문이었다면 먼저 용서를..^^;

익명 사용자의 이미지

인터럽트는 폴링과 비교해서 얘기하는게 맞습니다.

기술이란 필요에 의해서 발전하겠습니다.

Micro-Processor는 주로 연산(수치/논리)을 목적으로 만들어진 장치입니다.
하드웨어의 발전 및 사용자의 요구에 의해 다양한 하드웨어들이 마이크로프로세서와 연동하여 시스템을 구성하게 되었습니다.(흔히, 컴퓨터지요...)

그런데, CPU(엄밀하게는 마이크로 프로세서로 부르는게 타당)에는 눈이 없고, 귀도 없는지라, 아니면, 오감(?) 도 없고, 육감은 더더욱 없으니, CPU주변에 위치한 각종 장치들을 제어하기 위해서 방법론이 필요했습니다. 때로는, 주변에 위치한 장치들이 CPU에게 무언가 해달라는 요청을 할 방법이 필요했습니다.
(
- 주변에 위치한 장치들은 전부 주변장치로 봅니다.
- 주변장치가 CPU(특히, 메모리 유닛이 되겠지요) 로 들어 오는것은 Input이요, CPU로 부터 주변장치로 나가는 것은 Output이 됩니다. CPU(Control Unit, Arithmetic/Logic Unit, Memory Unit)를 제외하면 모두 IO장치들입니다.
- 근래에는 CPU가 대략 두 부분으로 나뉘어서 제작됩니다. CU, ALU를 하나의 칩에(마이크로 프로세서겠지요) 메모리는 별도유닛으로..
)

이때, CPU가 주기적으로 각 장치들에게 "너 뭐 할말있냐? 원하는것은?"등을 물어볼 수 있을것이고, 주변장치가 "대빵아~ 이것좀 해주라..." 하고 먼저 요청할 수 있는 메카니즘을 생각해 볼 수 있습니다.
전자를 폴링이라고 하고, 후자를 인터럽트라고 합니다.
폴링은 IO가 아주 빈번한 또는 항상 특정 장치의 상태를 감지해야 하는 경우에 적절하고, 인터럽트는 비교적 빈번하지 않은 IO를 수행하는 장치에 적합했습니다. 특히나, CPU에 대한 연산및제어대비하여 IO장치에 대한 응답속도는 매우 느려서, 가급적 CPU가 IO장치에 폴링하는 것을 배제하는 것이 CPU의 효율을 높이는 것이었기도 합니다.

이러한 인터럽트의 필요성은 CPU의 사이클에 인터럽트 사이클을 넣도록 하는 형태로 발전하게 됩니다. 머신 명령어를 수행하기 위해 만들어진 사이클들
fetch, indirect, execute 사이클에 interrupt 사이클이 존재하게 되어 보통 4개의 사이클을 돌며 명령어를 수행하게끔 CPU가 설계됩니다.
--------
"인터럽트가 발생하면, CPU는 하던작업을 중단하고, 해당 인터럽트 요청에 대한 서비스를 수행한 후 원래하던 작업을 다시 계속해야 합니다."

* 인터럽트 발생을 어떻게 알것인가?
CPU내에 플래그 레지스터를 두어 인터럽트및상태정보를 유지하게 합니다.
CPU로 직접 인터럽트를 거는 것을 방지하고 다수의 장치(IO장치)로 부터의 인터럽트를 허가하기 위해 인터럽트를 관리하는 대빵 콘트롤러를 둡니다. 예를 들어 8259, APIC등이 인텔계열을 사용하는 시스템에서 사용됩니다. 이러한 인터럽트 콘트롤러에 다수개의 장치가 인터럽트 요청을 하게만들고, 이 대빵 장치는 CPU와 직접 연결되게 합니다. CPU의 지네발중 하나를 차지하게 됩니다.

* 다양한 인터럽트들이 있는데, 인터럽트를 단지 하드웨어가 발생시키는 인터럽트로 간주하면 아니되고, 인터럽트를 보다 일반화하여 다음을 예시할 수 있습니다.
- H/W Interrupt
- S/W Interrupt
- Exception
-- trap
-- fault
-- abort

+ 이 중 Linux의 시스템 호출은(인텔) 0x80번째 인터럽트를 사용하게 됩니다.
+ fault는 운영체제의 VM관리에서 페이지 폴트처리시에 사용될 수 있습니다.
+ 각종 H/W 인터럽트 Clock등은 시간 및 동기화를 관리하는데 사용될 수 있습니다.
+ 아주 원시적인 장난감 DOS는 인터럽트로 운영체제(?!)를 구현했습니다.
+ 인터럽트발생시 어떻게 동작할 것인가도 프로그램가능한데, 도스시절에는 메인보드 제작자가 미리짜서 넣어놓은(ROM에 넣었고, 아주 기초적인 IO관련 루틴이 있어서 이를 ROM BIOS라고 부름)것을 호출하기도 했습니다만, 사실 이부분도 전부 새로 짤 수 있는 부분입니다.
+ 인터럽트 서비스루틴(인터럽트 발생시 해야하는 일을 코딩해 놓은 것)의 위치는 벡터테이블(이 테이블에 서비스루틴의 시작주소들이 있어서 벡터)에 존재하며, 이 벡터테이블의 값을 프로그래머가 짜놓은 루틴의 주소로 대체하여 서비스 루틴을 만들게 됩니다. (하드웨어적인 특성이 다소 있으나, 인터럽트 번호*4바이트로 과거 MS-DOS에서는 0~1024번지까지가 벡터테이블이었습니다.)
+ 인터럽트를 서브루틴과 구분짓는 것이 분명해야 합니다. 키는 플래그레지스터에 있습니다. 이를 저장하는가? 마는가? 정도는 구분해야 하며, 왜? 그러한가를 알아야 합니다.
+ 도스처럼 인터럽트만으로 시스템(운영체제)과 사용자 프로세스가 통신해서는 아니되며, 보다 상위의 인터페이스를 만드는 것이 바람직합니다.

* 이상 기초적인 인터럽트에 대한 얘기를 두서없이 주절.... 주저리... 했습니다.
** 참고로, 인터럽트는 아주 좋은 방법론이지만, 한10여년 전부터 다시 폴링이 대두되게 되는데, 네트워크 카드처럼 아주 빈번하게 IO를 요청하게 되는 경우가 많기 때문입니다. 거의 계산보다도 IO가 중시되는 경향도 있게되었습니다. 이 경우 인터럽트의 명령사이클(모든 기계명령어중 가장 길다는...)을 매 패킷마다 반복하는것은 무식한 방법으로 시스템의 효율에 악영향을 주므로, 인터럽트와 폴링을 적절히 배합한 방법론이 NIC(네트워크 인터페이스 카드)에서는 정설이며, 이를 NAPI라고 리눅스에서는 부른다는 .....

익명 사용자의 이미지

shji wrote:
CN wrote:
스케쥴러 이외에도 운영체제를 만들 때 "인터럽트"를 이용하기 쉽다는 점도 있습니다.

현대적인 PC에서는 운영체제는 CPU의 커널 모드에서 작동하며 응용 프로그램은 CPU의 사용자 모드에서 실행이 됩니다. 이때 사용자 모드에서 커널 모드로 전환되는 가장 만만한 방법이 인터럽트입니다. 그래서 운영체제의 기본적인 서비스를 인터럽트의 형태로 만드는 경우가 많습니다.

CN님께 질문있습니다..^^;

사용자 모드에서 커널 모드로 전환되는 데 사용하는 인터럽트는 소프트웨어 인터럽트를 말하는 것인가요? 아니라면 구지 인터럽트라는 이름이 붙는 것이 이상할 것도 같구요.. 제가 아는 소프트웨어 인터럽트는 BIOS 루틴인데요.. 이건 사실상 어드레스 대신에 인덱스로 호출하는 것이라 원래의 인터럽트의 의미와는 좀 다르다고 알고 있어서요..

그리고.. 말씀하신 방법이 운영체제 설계상의 일반적인 방법인가요? 아니면 인텔계열 PC의 특성인가요?

무식한 질문이었다면 먼저 용서를..^^;

사용자 모드에서 커널 모드로 전환되는 것이 시스템 콜을 통해서라면 소프트웨어 인터럽트가 맞습니다. 그런데 소프트웨어 인터럽트가 bios 루틴 인 것은 아닙니다. bios 루틴을 사용할 때도 소프트웨어 인터럽트를 사용하기는 합니다만, 32비트 보호모드의 현대 운영체제에서는 bios 루틴은 거의 사용하지 않는 것으로 알고 있습니다. 여기서 소프트웨어 인터럽트는 운영체제에 의해서 인터럽트 핸들러가 정의되어 있습니다. 이러한 소프트웨어 인터럽트와 하드웨어 인터럽트는 기본적으로 처리하는 방법이 비슷합니다.

다만 하드웨어 인터럽트는 언제 걸릴지 모르기 때문에, 특정 프로세스와 연관되어 있지 않습니다. 거기에 비해서 소프트웨어 인터럽트(시스템콜, 예외사항)는 인터럽트를 일으킨 프로세스와 연관되어 있습니다.

죠커의 이미지

shji wrote:
그리고.. 말씀하신 방법이 운영체제 설계상의 일반적인 방법인가요? 아니면 인텔계열 PC의 특성인가요?

무식한 질문이었다면 먼저 용서를..^^;

다른 부분은 수원님이 잘 답변해주셔서 이 부분만 답변 드리겠습니다.

(더 열악한 임베디드 쪽에서는 어떤 예외가 있는지 모르겠지만) PC 이상의 환경에서는 운영체제 설계의 일반적인 방법이라고 보시는 것이 옳을 것 같습니다.

유저모드에서 커널 모드로 바꾸어 운영체제게 업무를 처리하게 하는 다른 방법들이 있지만 인터럽트가 익숙해서 많이 쓰는 듯 합니다. BIOS에서 제공하는 서비스 역시 인터럽트의 형태로 되어 있기 때문에 로우레벨의 작업에서 인터럽트를 쓰는 것은 매우 오래된 전통이고 익숙하게 받아질 것 입니다. 그리고 이런 소프트에어 인터럽트를 "트랩"이라고 흔히 말합니다.

shji의 이미지

수원님 CN님 답변 잘 보고 배워갑니다. 감사합니다..^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.