kernel data IO buffer Interrupt service routine reques
요청 흐름도 kernel data I/O요청 buffer에 존재 有 Interrupt service routine 버퍼 캐시 reques 완료 통보 buffer에 존재 無 요청 생성부 요청 callback routine request 생성 처리 후 request 생성 전략 routine driver call back routine 1
요청 생성 과정 kernel data I/O요청 버퍼 영역 일부 block_read/write_full_page buffer에 존재 無 submit_bh() data I/O요청 완료 통보 buffer에 존재 有 callback routine bio 생성 요청 생성부 submit(bio) generic_make_request(q) __make_request(q, bio) __elv_add_request() request 생성 큐에 request 넣기 실제 처리 요청 전략 routine 2
__elv_add_request 3
전략 루틴 kernel 영역 전략 루 다음 순서로 틴blk_start_pre_flush() 처리할 요청 요청 생성부 __elv_next_request() elv_add_request Interrupt service routine elv_next_request(q) 큐에 요청이 남아 있으면 driver 영역 전략 routine do_ide_request() Ide_do_request() start_request() Ide_do_rw_disk() __Ide_do_rw_disk() 4
Interrupt Service Routine ISR루틴 IRQ 14 do_IRQ() __do_IRQ() handle_IRQ_event() 인터럽트 callback루틴 전략 routine ide_intr 5
__ide_do_rw_disk 6
Callback Routine kernel 영역 callback루 틴 data I/O요청 완료 통보 end_buffer_async_read/write ISR end_bio_bh_io_sync() driver 영역 callback routine bio_endio() __ide_end_request() __end_that_request_first ide_end_request() ide_dma_intr() end_that_request_first interrupt 有 전략 routine ide_do_request() interrupt 無 ide_intr() 7
end_buffer_async_read 8
kernel 전체 요청 구조도 end_buffer_async_read/write IRQ 14 end_bio_bh_io_sync() do_IRQ() block_read/write_full_page() bio_endio() __do_IRQ() submit_bh() __end_that_request_first handle_IRQ_event() submit(bio) ide_intr() end_that_request_first generic_make_request(q) elv_next_request(q) __make_request(q, bio) __elv_add_request() do_ide_request() Ide_do_request() ide_dma_intr() __elv_next_request() ide_end_request() blk_start_pre_flush() __ide_end_request() start_request() Ide_do_rw_disk() 9 __Ide_do_rw_disk()
- Slides: 9