>> Read No. 26021 article  
[질문]커널 I/O를 대신해주는 방법??

등록 2001-04-03 11:28:00     조회 2
이름 Sunset    

		안녕하세요.. 커널의 I/O를 대신해주기 위해 짠코드입니다..
고수분들 좀봐주세요..
 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 void My_Op( struct buffer_head *bh, int rw )
	{
	unsigned long RSector=0;
	unsigned long RBlock=0;
 	struct buffer_head *Rbh;
	struct buffer_head *Wbh;
 	RSector = bh->b_rsector;
	RBlock = RSector/2;
 	if( rw == READ ){
		if( buffer_uptodate(bh) )
			make_request( MAJOR(bh->b_rdev), rw, bh );
		else{
			Rbh = getblk( 776, RBlock, 1024 );
			Rbh->b_blocknr = RBlock;
			Rbh->b_rsector = RSector;
			Rbh->b_dev = 776;
			Rbh->b_rdev = 776;
			Rbh->b_state = bh->b_state;
			clear_bit( BH_Uptodate, &Rbh->b_state );
			make_request( MAJOR(Rbh->b_rdev), rw, Rbh );
			wait_on_buffer( Rbh );
			memcpy( bh->b_data, Rbh->b_data, 1024 );
			brelse( Rbh );
			bh->b_end_io( bh, 1 );
			}
		}
 	if( rw == WRITE ){
		if( !buffer_dirty(bh) )
			make_request( MAJOR(bh->b_rdev), rw, bh );
		else{
			Wbh = getblk( 776, RBlock, 1024 );
			Wbh->b_blocknr = RBlock;
			Wbh->b_rsector = RSector;
			Wbh->b_dev = 776;
			Wbh->b_rdev = 776;
			Wbh->b_state = bh->b_state;
			set_bit( BH_Dirty, &Wbh->b_state );
			memcpy( Wbh->b_data, bh->b_data, 1024 );
			make_request( MAJOR(Wbh->b_rdev), rw, Wbh );
			wait_on_buffer( Wbh );
			brelse( Wbh );
			clear_bit( BH_Dirty, &bh->b_state );
			make_request( MAJOR(bh->b_rdev), rw, bh );
			}
		}
	}
 이함수가 호출되는곳은 ll_rw_blk.c 내의 ll_rw_block 함수내에서 입니다..
ll_rw_block 함수내에서 make_request가 호출되는 바로 앞부분에서
제가 대신해주고자하는 장치에 I/O가 날아오면 이부분으로 넘어옵니다.
위와같이 해주면 별다른 문제가 없이 동작을 합니다.
그런데 궁금한것은 많은 파일을 복사, 삭제 등등을 하고 파일시스템까지 체크
를 해봤는데 문제는 없이 동작을 하지만 이렇게 제가 대신 읽어주고 써주는게
원래 커널이 읽고/쓰는것보다 조금 느려지는것같아요..
또하나는 위와같은 방법이 별문제가 없는것인지.. 아님 운이 좋아서 동작을
하는건지... 제가봐도 좀 어거지인듯 ㅡㅡ; 해서 이렇게 여러분들의
조언을 구합니다..
부탁드립니다..
잘못된점이라든지.. 아님 다른방법이라든지 등등... 많은 조언 부탁드립니다.
즐거운 하루 되세요..
이름
암호
Register [ localhost 목록보기 윗글 아랫글
글쓰기
답장쓰기 수정 삭제
정규표현식 [ 상세 검색 ]
페이지로딩: [ 0.99 초 ] 작업시간: [ 0.66 초 ]

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved
[TOP]

적수네 동네
+
| 적수네 동네
| 공부방
| 리눅스 잡지 서고
| LSN 소스
| 링크 모음
+---+
게시판
+
| 떠들어보세!
| 질문과 답변
| 새소식과 정보
| 1원짜리 팁?
| 대화방
+---+
칼럼?
+
| 세하 훔쳐보기
| Welcome2nite
| 혜진의 염장판
+---+
리눅스 상표권
+
| 반대 서명란
| 토론 게시판
+---+
GNU
+
| GNU 선언문
| GNU GPL
| GNU 미러 목록
+---+
프로젝트?
+
| 리눅스카운터
| RC5DES
| 실질헌법 제작
+---+
커널 소식
+
| 안정 버젼: 2.4.14
+---+
테마 선택
+
LSN 방송국?
+
| OFF AIR
+---+
회원
+
| 로그인
+---+
[ 적수네 동네 ] [ 리눅스 상표권 독점 반대 ] [ 한글 리눅스 문서 프로젝트 ] [ KrLine ] [ 사랑넷 ] [ Valid HTML 4.0! ] [ SlashDot ] [ Freshmeat ]
Copyleft (C) 1998-2001 Byeong-Chan Kim . License
TIME: 1789584947
System by WYZsoft, HDD by I.O.Linux, Mizi Research, Embryo, WOWLINUX, Domain by SarangNet, Network by KrLine.